2015-10-12 8 views
6

Ho cercato risposte a questa domanda specifica, ma non sono riuscito a trovare nulla. Ho bisogno di trovare il massimo e il minimo dei numeri di input, ma i valori che ho bisogno sono all'interno del ciclo for e non riesco a capire come usarli al di fuori di esso.Trova il massimo/minimo di valori all'interno di un ciclo for

System.out.print("How many numbers do you want to input?"); 

    int totalNumbers = console.nextInt(); 

    int minMax = 0; 
    for(int i = 1; i <= totalNumbers; i++){ 
     System.out.print("Number " + i + ": "); 
     int inputNumbers = console.nextInt(); 
    } 
    System.out.println(); 

    int smallest = Math.min(minMax); 
    System.out.println("Smallest = " + smallest); 
    int largest = Math.max(minMax); 
    System.out.println("Largest = " + largest); 

Non ho bisogno di codice modificato solo qualcosa che mi avranno sulla destra track.Thank voi!

+0

Prendere in considerazione la raccolta di numeri di input in una struttura di dati temporanea come array o raccolta che è possibile analizzare in un secondo momento dal ciclo di raccolta. – rsutormin

risposta

4

Riesci a notare il problema con il seguente ciclo?

for(int i = 1; i <= totalNumbers; i++){ 
     System.out.print("Number " + i + ": "); 
     int inputNumbers = console.nextInt(); 
    } 

Si esegue il ciclo totalNumbers volte e ogni volta che si crea un nuovo int con il nome inputNumbers e memorizzare il valore ricevuto dalla console. Inoltre, dove stai modificando il valore di minMax? Inoltre, Math.min(or max) non accetta singoli parametri e non li compila nemmeno.

Ora avete alcune opzioni:

  1. O memorizzare tutti i numeri in un array e poi attraversare quella per min e max elementi utilizzando qualche metodo di utilità.
  2. Impostare alcuni valori minimo e massimo ed eseguire un ciclo per ottenere tutti gli elementi e tenere traccia del ciclo minimo e massimo.

Non sto scrivendo nessuna soluzione come voglio che tu provi tu stesso.

3

A meno che non mi stia leggendo male quello che vuoi, non puoi semplicemente mantenere una variabile all'esterno del ciclo for e controllarli?

int minMax = 0; 
int smallest = 0; 
int largest = 0; 

for(int i = 1; i <= totalNumbers; i++){ 
    System.out.print("Number " + i + ": "); 
    int inputNumbers = console.nextInt(); 
    if(inputNumbers > largest){ 
     largest = inputNumbers; 
    } else if (inputNumbers < smallest){ 
     smallest = inputNumbers; 
    } 
} 
System.out.println(); 

System.out.println("Smallest = " + smallest); 
System.out.println("Largest = " + largest); 

Questo è il modo più diretto e logico di controllare i valori di ingresso e di decidere se sono il più piccolo o più grande attualmente conosciuto (Edit: meno che non si richiede l'uso di Math.minMax)

+1

Questo approccio è pulito, ma i valori iniziali sono problematici. (-1) – DaoWen

+0

@DaoDao Sono d'accordo, in una certa misura. O dovrei ricontrollare i valori con qualche tipo di valore costante, o inizializzare 'il più piccolo 'alla dimensione massima int, e' il più grande »alla dimensione minima int. I tuoi pensieri? – Singular1ty

1

puoi farlo da solo mettere se il resto condizioni dentro per il ciclo ... come

  1. prendere 2 variabile al di fuori del ciclo uno per il valore massimo e l'altro per il negozio di valore minimo.
  2. loop interno per assegnare il numero di ingresso alla prima e alla prima massima.
  3. dopo che coma il prossimo numero con questo e riassegna i valori.
  4. alla fine del ciclo troverete sia il minimo che il massimo.
2

Pseudocodice:

smallest := +∞ 
largest := -∞ 

for each number read, n: 
    if n > largest: 
     largest := n 
    if n < smallest: 
     smallest := n 

print the results 

Suggerimento:

Java int s non possono rappresentare ± ∞. Utilizzare invece Integer.MIN_VALUE e Integer.MAX_VALUE.

+0

No 'Integer' può essere più piccolo di' Integer.MIN_VALUE' e nessun 'Integer' può essere maggiore di' Integer.MAX_VALUE' e in tal caso otterremo sempre "il più piccolo" e "il più grande" come risultato. No? –

+0

@akhil_mittal - Se non stai attento con i valori iniziali, alla fine potresti finire con la spazzatura. Ad esempio, se l'utente immette tutti i numeri positivi, ma "più piccolo" è stato inizializzato su "0", allora quel codice restituirà "0" come "il più piccolo", anche se l'utente non ha mai inserito "0". Usando il valore massimo per "il più piccolo" e il valore minimo per "il più grande", si garantisce che i risultati finali saranno dall'input dell'utente (a condizione che l'utente inserisca almeno un numero). – DaoWen

+0

Nel caso in cui l'utente abbia inserito valori come "10,50,40,30,60", l'output non sarà "10 e 60". Non è vero? –

4

I metodi Math.min() e Math.max(), in base alla documentazione di oracle, possono solo confrontare due valori.Importare i valori in un array e quindi eseguire operazioni sull'array, dovrebbe consentire di trovare i minimi e massimi, così come qualsiasi altra operazione di dati abbastanza facilmente.

int[] numbers = new int[totalNumbers]; 

for (int i = 0; i < totalNumbers; i++) { 
    numbers[i] = console.nextInt(); 
} 

//Other Operations