2015-10-12 2 views
6

Ich habe nach Antworten auf diese spezifische Frage gesucht, konnte aber nichts finden. Ich muss das Maximum und Minimum der Eingangszahlen finden, aber die Werte, die ich brauche, sind innerhalb der for-Schleife und ich kann nicht herausfinden, wie man sie außerhalb davon benutzt.Finden Sie die Max/Min von Werten innerhalb einer for-Schleife

Ich brauche keinen Code geändert nur etwas, das mich auf die richtige Spur bringen wird. Danke!

+0

Erwägen Sie, Eingangsnummern in einer temporären Datenstruktur wie Array oder Sammlung zu sammeln, die Sie später außerhalb der Sammelschleife analysieren können. – rsutormin

Antwort

4

Können Sie das Problem mit der folgenden Schleife feststellen?

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

Sie führen die Schleife totalNumbers Mal und jedes Mal, erstellen Sie einen neuen int mit Namen inputNumbers und den Wert von der Konsole empfangen. Wo ändern Sie auch den Wert minMax? Auch Math.min(or max) nimmt keine einzelnen Parameter und wird nicht einmal kompiliert.

Jetzt haben Sie einige Optionen:

  1. Entweder speichern alle Zahlen in einem Array und dann die Traverse für min und max Elemente einen gewissen Nutzen-Methode.
  2. Legen Sie einen Min- und Max-Wert fest und führen Sie eine Schleife aus, um alle Elemente zu erhalten. Außerdem können Sie den Min- und Max-Wert in der Schleife verfolgen.

Ich schreibe keine Lösung, wie ich möchte, dass Sie es selbst versuchen.

3

Wenn ich nicht falsch interpretiere, was Sie wollen, können Sie nicht einfach eine Variable außerhalb der for-Schleife verwalten und prüfen?

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); 

Dies ist die direkteste und logische Art und Weise die Eingangswerte zu prüfen und zu entscheiden, ob sie die kleinste oder größte derzeit bekannte (Edit: Sofern Sie erfordern die Verwendung von Math.minMax) sind

+1

Dieser Ansatz ist sauber, aber Ihre anfänglichen Werte sind problematisch. (-1) – DaoWen

+0

@DaoWen stimme ich zu, in gewissem Maße. Entweder müsste ich die Werte gegen eine Art von konstantem Wert überprüfen oder "kleinste" auf die maximale int-Größe und "größte" auf die minimale int-Größe initialisieren. Ihre Gedanken? – Singular1ty

1

Sie können es tun, indem nur für Schleife, wenn sonst Zustand nach innen setzen ... wie

  1. nehmen 2 Variable bei Außenlooping ein für max-Wert und andere für min Wertspeicher.
  2. interne Schleife Zuweisen der Eingangsnummer zu Min und Max zum ersten Mal.
  3. danach comare nächste Zahl mit diesem und neu zuweisen Werte.
  4. Am Ende der Schleife finden Sie sowohl min als auch max.
2

Pseudocode:

smallest := +∞ 
largest := -∞ 

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

print the results 

Hinweis:

Java int s kann nicht darstellen ± ∞. Verwenden Sie stattdessen Integer.MIN_VALUE und Integer.MAX_VALUE.

+0

Nein 'Integer' kann kleiner sein als' Integer.MIN_VALUE' und kein 'Integer' kann größer sein als' Integer.MAX_VALUE' und in diesem Fall erhalten wir als Ergebnis immer 'small' und' large'. Nee? –

+0

@akhil_mittal - Wenn Sie nicht auf die Anfangswerte achten, können Sie am Ende mit Müll enden. Z. B. wenn der Benutzer alle positiven Zahlen eingibt, aber "kleinster" auf "0" initialisiert wurde, dann wird dieser Code "0" als "kleinster" zurückgeben, obwohl der Benutzer niemals "0" eingegeben hat. Indem Sie den maximalen Wert für "kleinste" und den minimalen Wert für "größte" verwenden, garantieren Sie, dass die Endergebnisse von den Benutzereingaben stammen (solange der Benutzer mindestens eine Zahl eingibt). – DaoWen

+0

Wenn der Benutzer Werte als "10,50,40,30,60" eingegeben hat, ist die Ausgabe nicht "10 und 60". Ist es nicht? –

4

Die Methoden Math.min() und Math.max() können gemäß der Orakeldokumentation nur zwei Werte vergleichen.Das Importieren der Werte in ein Array und das anschließende Ausführen von Operationen für das Array sollten es Ihnen ermöglichen, Minima und Maxima sowie andere Datenoperationen recht einfach zu finden.

int[] numbers = new int[totalNumbers]; 

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

//Other Operations 
Verwandte Themen