Qual a forma correta de resolver um problema que pede 3 inteiros e diz qual é o maior e o menor

5 respostas
L

Olá, estou começando a estudar Java e depois de algumas tentativas, consegui uma solução para essa proposta.

Rodou legal, mas gostaria de saber se tem uma melhor forma de fazer ou mais correta ?

package primeiro;
import java.util.Scanner;

public class Primeiroo {

public static void main(String[] args){

Scanner entrada = new Scanner(<a href="http://System.in">System.in</a>);

float a, b, c;
System.out.print("Digite o 1° número: ");    
    a = entrada.nextFloat();
    
    System.out.print("Digite o 2° número: ");    
    b = entrada.nextFloat();
    
    System.out.print("Digite o 3° número: ");    
    c = entrada.nextFloat();
    
    if((a > b)&&(b > c)){
        System.out.printf("Número maior: %.2f\n", a);
        System.out.printf("Número menor: %.2f\n", c);
    }
    else if ((b > c)&&(c > a)){
        System.out.printf("Número maior: %.2f\n", b);
        System.out.printf("Número menor: %.2f\n", a);
    }
    else if ((b > c)&&(c < a)) {
        System.out.printf("Número maior: %.2f\n", b);
        System.out.printf("Número menor: %.2f\n", c);
    }
    else{
    System.out.printf("Número maior: %.2f\n", c);
    System.out.printf("Número menor: %.2f\n", a);
    }
    
}

}

5 Respostas

Narclk

Sim existem vários, você com o tempo e prática vai melhorando seus algorítimos, segue um exemplo abaixo de uma outra maneira com menor código:

`public class Principal {

public static void main(String[] args) {
	
	Scanner entrada = new Scanner(System.in);
	float maior, menor, temp;

	    System.out.print("Digite o 1° número: ");    
	    menor = maior = entrada.nextFloat();
        
	    System.out.print("Digite o 2° número: ");    
	    temp = entrada.nextFloat();
	    maior = (maior < temp ? temp : maior);
	    menor = (menor > temp ? temp : menor);

	    System.out.print("Digite o 3° número: ");    
	    temp = entrada.nextFloat();
	    maior = (maior < temp ? temp : maior);
	    menor = (menor > temp ? temp : menor);
	    
	    System.out.printf("Número maior: %.2f\n", maior);
	    System.out.printf("Número menor: %.2f\n", menor);
	    
	    entrada.close();

}

}`

Espero que ajude, abraços…

L

A forma que eu fiz, foi logo depois de ler sobre if else. Mas é interessante essa flexibilidade que você tem na hora de criar seu código…Com o tempo entendo algumas coisas que você fez Narclk. É bom para ir me acostumando.

Valeu, obrigado.

V

Bom, como foi dito anterior pelo Narclk, existem várias formas de resolver esse problema. Isso porque esse problema faz uso da ordenação de valores. Nesse algoritmo que você utilizou, no entanto, isso não foi feito poque você escreveu uma linha de código para cada teste, ou seja, é um jeito simples de resolver, mas só é interessantes para casos onde o número de valores a serem testados seja bem definido, como no seu caso que são somente três números.
Como eu havia dito, a melhor forma de resolver esses problemas que necessitam determinar a ordem dos números (ou mesmo letras) é usando as técnicas ou algoritmos de ordenação. O mais simples deles é o bubble sort, mas também é o mais limitado quanto à performance de máquina. Sugiro que pesquise sobre os métodos* Bubble Sort*,* Selection Sort*, Merge Sort, Quick Sort - só para citar alguns. Abaixo o problema (generalizado) resolvido via Selection Sort:

`import java.util.Scanner;

public class Ordenacao

{

public static void main(String[] args)

{

Scanner scan = new Scanner(<a href="http://System.in">System.in</a>);

int t;

double maior,

menor,

numeros[];
System.out.print("Informe o tamanho da sequência: ");
	
	t = scan.nextInt();
	numeros = new double[t];
	
	System.out.print("\n Digite os valores...\n\n");
	
	for(int i = 0; i < t; i++)
	{
		System.out.print((i+1) + "\u00BA: ");
		numeros[i] = scan.nextDouble();
	}
	
	scan.close();
	
	menor = numeros[0];
	maior = numeros[t-1];
	for(int i = 0; i < t; i++)
	{
		if(numeros[i] < menor)
			menor = numeros[i];
		
		if(numeros[i] > maior)
			maior = numeros[i];
	}
	
	System.out.print("O maior número informado é " + maior + " e o menor é " + menor);
}

}
`

L

Eu tô estudando pelo site Java Progressivo(bem no começo) e não sei se dessa forma ainda vai ser abordado von_Tappenburg, mas já valeu por uma pesquisa no google sobre “Java algoritmos de ordenação”

Pra quem está começando é muito bom conciliar um material de estudo com as dúvidas aqui no forum.

Valeu.

L

Uma outra forma de se fazer…

import java.util.Scanner;
import java.util.Locale;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;

public class MaiorMenor {
    public static void main(String[] args) {
        List<Double> lista = new ArrayList<Double>();
        Scanner entrada = new Scanner(System.in).useLocale(Locale.US);

        for (int i = 0; i < 3; i++) {
            System.out.printf("Digite o %dº número: ", i + 1);
            lista.add(entrada.nextDouble());
        }

        entrada.close();

        System.out.printf("Menor número: %.2f\n", Collections.min(lista));
        System.out.printf("Maior número: %.2f\n", Collections.max(lista));
    }
}
Criado 3 de janeiro de 2016
Ultima resposta 4 de jan. de 2016
Respostas 5
Participantes 4