Ajuda - Java - maior e menor numero
pessoal, estou precisando de uma ajudinha, quero fazer um pequeno exercicio/exemplo em java, como identificar os numeros menores e maiores, pelo que entendi vou ter que usar if/else ou varios if´s. isso no console mesmo. obrigada.
Janaina Mendes
Curtidas 0
Respostas
Joel Rodrigues
11/09/2014
Explique o problema em si. É pra identificar o maior número em um vetor? Entre dois números? Ou seja, qual é o problema?
GOSTEI 0
Janaina Mendes
11/09/2014
Ler 3 ou mais numeros e informar quem é o maior...depois tento desenrolar o resto. obrigada.
GOSTEI 0
Joel Rodrigues
11/09/2014
Nesse caso, sendo a quantidade de números fixa e baixa, compensa mais utilizar alguns IFs (não serão muitos). Se forem mais números, principalmente se for uma quantidade indefinida, aí seria mais interessante usar um array.
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
Segue o código que captura o maior número digitado:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class MaiorNumero {
/**
* @param args
* @throws IOException
* @throws NumberFormatException
*/
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
List<Integer> numeros = new ArrayList<Integer>();
int n = -1;
do{
System.out.print("Digite o número (-1 para mostrar o maior número): ");
n = Integer.parseInt(rd.readLine());
if (n == -1){
System.out.println("Maior numero é: "+retornaMaiorValor(numeros));
}else{
numeros.add(n);
}
}while(n != -1);
}
public static int retornaMaiorValor(List<Integer> numeros){
int aux = 0;
for (int i = 0; i < numeros.size(); i ++){
if (numeros.get(i) > aux){
aux = numeros.get(i);
}
}
return aux;
}
}
GOSTEI 0
Janaina Mendes
11/09/2014
Funcionou legal...apartir dai a logica é a mesma para mostrar tambem o menor numero digitado?
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
Sim, o único local que você vai mudar é aqui:
Colocando o sinal de "<" (menor).
if (numeros.get(i) < aux){
aux = numeros.get(i);
}
Colocando o sinal de "<" (menor).
GOSTEI 0
Janaina Mendes
11/09/2014
pronto, é só renomear a variavel?
encontrei um exemplo, me diz o que acha dele:
se fosse utilizar seria com varios if´s.
encontrei um exemplo, me diz o que acha dele:
if (numero1 > numero2 && numero1 > numero3 ||numero1 > numero3 && numero1 > numero2 ){
System.out.print("o primeiro numero: " + numero1 +" é o numero maior dos 3\n");
}
se fosse utilizar seria com varios if´s.
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
pronto, é só renomear a variavel?
encontrei um exemplo, me diz o que acha dele:
se fosse utilizar seria com varios if´s.
encontrei um exemplo, me diz o que acha dele:
if (numero1 > numero2 && numero1 > numero3 ||numero1 > numero3 && numero1 > numero2 ){
System.out.print("o primeiro numero: " + numero1 +" é o numero maior dos 3\n");
}
se fosse utilizar seria com varios if´s.
Este é exemplo é limitado. Se você tiver 100 valores ? Vai fazer 100 ifs ?
o que ti passei serve para 2 valores ou 1 milhão de valores.
GOSTEI 0
Janaina Mendes
11/09/2014
Pensando bem é isso mesmo, mas se for um exemplo simples, com poucos numeros. a melhor opção é o if que citou?
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
Continuo dizendo que não. Sempre trabalhe em soluções genéricas, a forma que você apresentou não é otimizada de tiver mais que 5 valores, se for apenas 2 ou 3 então você pode usar sua solução.
GOSTEI 0
Janaina Mendes
11/09/2014
As vezes me confundo com essa forma otimizada, sempre o codigo mais "curto" é melhor, tem como saber se a otimização é valida atraves do debbug?
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
As vezes me confundo com essa forma otimizada, sempre o codigo mais "curto" é melhor, tem como saber se a otimização é valida atraves do debbug?
"Sempre o código mais curto é melhor". Essa afirmação não confere. Código curto não é sinônimo de otimização e nunca será, prova disso é que algoritmos de ordenações mais complexos como o HEAP SORT são muito melhores que um INSERTION SORT que é bem mais simples e "curto".
Você sabe se seu algoritmo é otimizado (melhor que um outro ou executa em tempo hábil) através do cálculo de complexidade do algoritmo, estude o pior caso, melhor caso e caso médio do seu algoritmo e categorize o desempenho como logaritmântico, exponencial e etc.
Estude isso: http://pt.wikipedia.org/wiki/Complexidade_computacional
GOSTEI 0
Janaina Mendes
11/09/2014
Na "mão" mesmo é que sabemos se está bom? legal Ronaldo, pensei que pudesse ser visualizado com ajuda de algo. obrigada pela dica.
GOSTEI 0
Janaina Mendes
11/09/2014
Na "mão" mesmo é que sabemos se está bom? legal Ronaldo, pensei que pudesse ser visualizado com ajuda de algo. obrigada pela dica.
UP!!! perguntinha...
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
Na "mão" mesmo é que sabemos se está bom? legal Ronaldo, pensei que pudesse ser visualizado com ajuda de algo. obrigada pela dica.
Você tem que fazer testes de performance, medindo o tempo de execução dos algoritmos. Levando em consideração que existem variações: Melhor Caso, Pior Caso e Caso Médio.
GOSTEI 0
Janaina Mendes
11/09/2014
Mas como se faz esses testes de performance?
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
Você pode colocar um contador de tempo no inicio e no fim da execução do seu algoritmo e comparar depois.
GOSTEI 0
Janaina Mendes
11/09/2014
Me desculpe Ronaldo, mas eu não entendi nada sobre esse contador de tempo.
GOSTEI 0
Ronaldo Lanhellas
11/09/2014
Faça assim:
//Contador inicial
long tempoInicio = System.currentTimeMillis();
/*
* CÓDIGO DO ALGORITMO AQUI
*/
//contador final
System.out.println("Tempo Total: "+(System.currentTimeMillis()-tempoInicio));
//O código acima irá te retornar o tempo gasto em milisegundos...
GOSTEI 0
Janaina Mendes
11/09/2014
Essa é uma das formas ou a unica forma de fazer um contador de tempo, basta inseri-lo no codigo que ele mostra o tempo gasto pelo codigo/logica feita?
GOSTEI 0