Ajuda - Java - maior e menor numero

Java

11/09/2014

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

Janaina Mendes

Curtidas 0

Respostas

Joel Rodrigues

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

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

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

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

Janaina Mendes

11/09/2014

Funcionou legal...apartir dai a logica é a mesma para mostrar tambem o menor numero digitado?
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

11/09/2014

Sim, o único local que você vai mudar é aqui:

 if (numeros.get(i) < aux){
                aux = numeros.get(i);
            }


Colocando o sinal de "<" (menor).
GOSTEI 0
Janaina Mendes

Janaina Mendes

11/09/2014

pronto, é só renomear a variavel?

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

Ronaldo Lanhellas

11/09/2014

pronto, é só renomear a variavel?

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

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

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

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

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

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

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

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

Janaina Mendes

11/09/2014

Mas como se faz esses testes de performance?
GOSTEI 0
Ronaldo Lanhellas

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

Janaina Mendes

11/09/2014

Me desculpe Ronaldo, mas eu não entendi nada sobre esse contador de tempo.
GOSTEI 0
Ronaldo Lanhellas

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

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
POSTAR