2015-10-12 41 views
6

Szukałem odpowiedzi na to konkretne pytanie, ale nie byłem w stanie znaleźć niczego. Muszę znaleźć maksimum i minimum liczb wejściowych, ale wartości, których potrzebuję, są w pętli for i nie mogę wymyślić, jak z nich korzystać poza tym.Znajdź maksymalną/minimalną wartość w pętli 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); 

Nie potrzebuję zmienionego kodu, tylko coś, co doprowadzi mnie na właściwą drogę. Dziękuję!

+0

Należy rozważyć zbieranie liczb wejściowych w tymczasową strukturę danych, takich jak tablica lub kolekcja, które można później przeanalizować z poziomu pętli kolekcjonerskiej. – rsutormin

Odpowiedz

4

Czy można zauważyć problem z następującą pętlą?

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

Używasz pętli totalNumbers razy i za każdym razem, gdy tworzysz nowy int nazwą inputNumbers i zapisać wartość otrzymaną od konsoli. Również gdzie zmieniasz wartość minMax? Również Math.min(or max) nie przyjmuje pojedynczych paramtere i nawet nie skompiluje.

Teraz masz kilka opcji:

  1. Albo zapisać wszystkie liczby w tablicy, a następnie przechodzenie że dla min i max elementy za pomocą jakiejś metody użytkową.
  2. Ustaw minimalną i maksymalną wartość i uruchom pętlę, aby uzyskać wszystkie elementy, a także śledzić min i maks. W pętli.

Nie piszę żadnego rozwiązania, ponieważ chcę, abyś sam spróbował.

3

Jeśli nie rozumiem tego, co chcesz, nie możesz po prostu utrzymywać zmiennej na zewnątrz pętli for i sprawdzać je?

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

To jest najbardziej bezpośrednim i logiczny sposób sprawdzania wartości wejściowe i podejmowaniu decyzji, czy oni najmniejsza lub największa obecnie znana (Edit: Chyba wymagają o wykorzystaniu Math.minMax)

+1

To podejście jest czyste, ale początkowe wartości są problematyczne. (-1) – DaoWen

+0

@DaoWen Zgadzam się, do pewnego stopnia. Musiałbym dwukrotnie sprawdzić wartości przed pewną stałą wartością lub zainicjować "najmniejszy" do maksymalnego rozmiaru int, a "największy" do rozmiaru min. Twoje myśli? – Singular1ty

1

można to zrobić po prostu umieścić, jeśli warunek else wewnątrz pętli for ... jak

  1. Take 2 zmienną na zewnątrz pętli jednego do maksymalnej wartości i drugi dla magazynu wartości min.
  2. Wewnętrzna pętla przypisuje numer wejścia do min i maks. Po raz pierwszy.
  3. po tym, comare następny numer z tym i ponownie przypisać wartości.
  4. na końcu pętli znajdziesz zarówno min., Jak i maks.
2

Pseudokod:

smallest := +∞ 
largest := -∞ 

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

print the results 

Podpowiedź:

Java int s nie może reprezentować ± ∞. Zamiast tego należy użyć Integer.MIN_VALUE i .

+0

Żaden "Integer" nie może być mniejszy niż 'Integer.MIN_VALUE' i żaden' Integer' nie może być większy niż 'Integer.MAX_VALUE' iw takim przypadku zawsze otrzymamy jako wynik" najmniejszy "i" największy ". Nie? –

+0

@akhil_mittal - Jeśli nie jesteś ostrożny z wartościami początkowymi, możesz skończyć z śmieciami na końcu. Np., Jeśli użytkownik wprowadzi wszystkie liczby dodatnie, ale "najmniejszy" został zainicjowany na "0", wówczas kod ten zwróci "0" jako "najmniejszy", nawet jeśli użytkownik nigdy nie wprowadził wartości "0". Używając maksymalnej wartości dla "najmniejszego" i minimalnej dla "największej", gwarantujesz, że ostateczne wyniki będą pochodzić od danych wprowadzanych przez użytkownika (o ile użytkownik wprowadzi co najmniej jeden numer). – DaoWen

+0

Jeśli użytkownik wprowadził wartości jako '10,50,40,30,60', dane wyjściowe nie będą miały wartości" 10 i 60 ". Czyż nie? –

4

Metody Math.min() i Math.max(), zgodnie z dokumentacją Oracle, mogą porównywać tylko dwie wartości.Importowanie wartości do tablicy, a następnie wykonywanie operacji na macierzy, powinno pozwolić na łatwe znalezienie minimum i maksimum, a także dowolne inne operacje na danych.

int[] numbers = new int[totalNumbers]; 

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

//Other Operations