Esiste un modo più rapido per elaborare questa logica?

2

Lo scopo di questo compito era trovare il più piccolo e il più grande del numero intero (input dell'utente 5 voci)

Sono un programmatore Java principiante senza esperienza precedente. C'è un modo più semplice per farlo senza una tonnellata di istruzioni if / else?

Perdona il codice sporco.

    //Scanner Object
    Scanner input = new Scanner(System.in);

    int num1, num2, num3, num4, num5;
    int large;
    int small;

    System.out.print("Enter Num1: ");
    num1 = input.nextInt();

    System.out.print("Enter Num2: ");
    num2 = input.nextInt();

    System.out.print("Enter Num3: ");
    num3 = input.nextInt();

    System.out.print("Enter Num4: ");
    num4 = input.nextInt();

    System.out.print("Enter Num5: ");
    num5 = input.nextInt();

    //If/Else statements (SMALL)
    if (num1<num2 && num1<num3 && num1<num4 && num1<num5) {
        small = num1;

        }


    else if (num2<num1 && num2<num3 && num2<num4 && num2<num5) {
                small = num2;

                        }

    else if (num3<num1 && num3<num2 && num3<num4 && num3<num5) {
                small = num3;


    }

    else if (num4<num1 && num4<num2 && num4<num3 && num4<num5) {
                small = num4;


    }

    else {
        small = num5;

    }

    //Large

    if (num1>num2 && num1>num3 && num1>num4 && num1>num5) {
        large = num1;
    }

    else if (num2>num1 && num2>num3 && num2>num4 && num2>num5) {
                                        large = num2;
    }

    else if (num3>num1 && num3>num2 && num3>num4 && num3>num5) {
                large = num3;
    }

    else if (num4>num1 && num4>num2 && num4>num3 && num4>num5) {
                    large = num4;
    }

    else {
                large = num5;

            }


    //Display: Use printf when using a format limiter (%)

    System.out.printf("The smallest integer: %d\n", small);
    System.out.printf("The largest integer: %d\n", large);




    }// end of main

}
    
posta AppSensei 24.05.2012 - 23:02
fonte

3 risposte

3

Puoi utilizzare non solo array come suggerito da Caleb, ma anche elenchi e ordinamento.

Non è il modo più efficiente, ma è, secondo me, il più veloce da implementare.

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    List numbers = new ArrayList<Integer>();

    int currentNumber;

    for(int i=0; i<5; i++){
        System.out.print("Enter Num"+(i+1)+": ");
        currentNumber=input.nextInt();
        numbers.add(currentNumber);
    }

    Collections.sort(numbers);

    System.out.printf("The smallest integer: %d\n", numbers.get(0));
    System.out.printf("The largest integer: %d\n", numbers.get(4));

}// end of main

Modifica

Un'alternativa per milioni di elementi, migliorata con la proposta jk. :

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    Integer min = Integer.MAX_VALUE;
    Integer max = Integer.MIN_VALUE;

    int currentNumber;

    for(int i=0; i<5; i++){
        System.out.print("Enter Num"+(i+1)+": ");
        currentNumber=input.nextInt();

        max = Math.max(max, currentNumber);
        min = Math.min(min, currentNumber);
    }


    System.out.printf("The smallest integer: %d\n", min);
    System.out.printf("The largest integer: %d\n", max);

}// end of main
    
risposta data 24.05.2012 - 23:22
fonte
5

Ci sono sicuramente modi migliori per farlo. Metti i valori in una matrice e poi esegui la scansione attraverso l'array cercando di tenere traccia dei valori più piccoli e più grandi che trovi:

for (i in valueArray) {
    if (i < min) 
        min = i;
    if (i > max)
        max = i;
}

Lo lascerò in codice reale fino a te.

    
risposta data 24.05.2012 - 23:13
fonte
1

Altri hanno fornito buone soluzioni generalizzate. Offrirei una variante di ciò che evita l'ordinamento:

int largest = Integer.MIN_VALUE;
System.out.print("Enter Num1: ");
num1 = input.nextInt();
largest = Math.max(num1, largest)

System.out.print("Enter Num2: ");
num2 = input.nextInt();
largest = Math.max(num2, largest)

System.out.print("Enter Num3: ");
num3 = input.nextInt();
largest = Math.max(num3, largest)

System.out.print("Enter Num4: ");
num4 = input.nextInt();
largest = Math.max(num4, largest)

System.out.print("Enter Num5: ");
num5 = input.nextInt();
largest = Math.max(num5, largest)

Questo è fondamentalmente lo stesso del suggerimento di Caleb, ma senza l'enumerazione e fatto lungo la strada.

    
risposta data 25.05.2012 - 21:01
fonte

Leggi altre domande sui tag