Olá Pessoal!!!
Como que eu faço para selecionar em um array de inteiros o maior número.
Tipo tenho na posição array[0] = 123 na posição array[1] = 53, array[2] = 100
etc… E desse array tirar o numero de maior valor.
Você pode ir percorrendo o array em um loop e comparando se o número que tem na mão é maior que o número na posição que está. Se for maior, você atualiza o teu número e vai continuando até o final.
Você pode utilizar o metodo static “sort” da classe Arrays.
Uma de suas assinaturas é “sort(T[] a, Comparator<? super T> c)”, então é só criar uma classe que implementa a interface Comparator
Segue abaixo um modelo para análise
public class Principal {
public static void main(String[] args) {
class OrdenarDesc implements Comparator<Integer> {
public int compare(Integer o1, Integer o2) {
if (o1.compareTo(o2) == - 1)
return 1;
else if (o1.compareTo(o2) == 1)
return - 1;
return 0;
}
}
Integer[] num = {45, 32, 58, 92, 108, 42};
Arrays.sort(num, new OrdenarDesc());
for (int x: num)
System.out.println(x);
}
}
Qualquer dúvida só postar novamente
Att.
Astork
PS:
para facilitar o código
Essse método.
public int compare(Integer o1, Integer o2) {
if (o1.compareTo(o2) == - 1)
return 1;
else if (o1.compareTo(o2) == 1)
return - 1;
return 0;
}
Pode ser descrito assim:
public int compare(Integer o1, Integer o2) {
return ((int) o1) - ((int)o2);
}
Ou:
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
public class Main
{
public static void main(String[] args)
{
int[] array =
{
1, 4, 36, 81, 64, 9, 16, 100, 25, 49, 64
};
int maior = 0;
for (int i = 0; i < array.length; i++)
if (array[i] > maior)
maior = array[i];
System.out.println("O maior é " + maior);
}
}
[quote]Pode ser descrito assim:
view plaincopy to clipboardprint?
public int compare(Integer o1, Integer o2) {
return ((int) o1) - ((int)o2);
}
public int compare(Integer o1, Integer o2) {
return ((int) o1) - ((int)o2);
}
Ou:
view plaincopy to clipboardprint?
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
[/quote]
Realmente o código pode ser escrito desta forma… mas da maneira que colocou ai, ele está ordenando crescente… e o tópico quer decrescente…
então tem que mudar a ordem dos parametros o1 e o2
Ficando assim
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
ou
public int compare(Integer o1, Integer o2) {
return ((int) o2) - ((int)o1);
}
Agora o interessante de todas estas respostas é que o Usuario shadown entenda o que está acontecendo…
Pois foi criado inumeras soluções, desde uma lógica como o "Bruno Laturner " citou, os modelos que fiz… um deles sendo implementado como se não tivesse o compareTo, e as melhorias propostas.
Att.
Astork
Sim… mas o problema não é esse…
é que já vi em outros códigos pessoas que fizeram como voce colocou no seu exemplo… e em listas com muitos resultados essa comparação com if pode ser prejudicial a performance.
Não tanto assim, mas se existe uma outra solução, por que não usar?
Acho que esse é o jeito mais simples e mais fácil de se compreender:
[code]import javax.swing.JOptionPane;
public class MaiorNumero {
public static void main(String args[]) {
int numeros[] = new int[10];
int max=0;
JOptionPane.showMessageDialog(null, "Insira 10 números INTEIROS!");
try{
for(int i = 0; i < numeros.length; i++) {
numeros[i] = Integer.parseInt(JOptionPane.showInputDialog("Numero" + (i+1) + ":"));
if (max < numeros[i])
max = numeros[i];
}
}catch(Exception e) {
JOptionPane.showMessageDialog(null, "Numero Inválido!!!");
System.exit(0);
}
JOptionPane.showMessageDialog(null, "O maior número digitado foi " + max);
}
}[/code]
Onde numeros[i] é o seu Array e max é variável que vai armazenar o valor…voce usa a estrutura de repetição pra passar por cada elemento do seu Array e verificar se max é maior que a posição do Array.Se a posição do Array for maior, max armazena este valor.Depois é só imprimir ^^
Mas desta maneira não estamos reutilizando o que java já dispoe para nos… !!! no caso o metodo “sort(T[] a, Comparator<? super T> c)”
Ae galera vlw consegui
Mas desta maneira não estamos reutilizando o que java já dispoe para nos… !!! no caso o metodo “sort(T[] a, Comparator<? super T> c)”
[/quote]
Se for pra utilizar o que o Java disponibiliza, use o método max do Collections:
import java.util.Arrays;
import java.util.Collections;
public class Main
{
public static void main(String[] args)
{
Integer[] array =
{
1, 4, 36, 81, 64, 9, 16, 100, 25, 49, 64
};
int maior = Collections.max(Arrays.asList(array));
System.out.println("O maior é " + maior);
}
}