Member 13458860 Ответов: 3

Почему мой min всегда выводит 0?


Сначала я прошу пользователя ввести 10 чисел, затем я должен найти максимальное и минимальное из этих чисел. Я могу распечатать максимальное количество моих входных данных, но я не могу понять, как напечатать мое минимальное число.

Что я уже пробовал:

import java.util.Scanner;
public class App {

    public static void main(String[] args) {
        int[] minAndMax = new int[10];
        Scanner scan = new Scanner(System.in);
        
  
        int smallest = minAndMax[0];
        int largest = minAndMax[0];
       
        
        for(int i = 0; i < minAndMax.length; i++ )
        {
           System.out.print("Enter in a number: ");
           minAndMax[i] = scan.nextInt();
        }
      
        for (int i = 0; i < minAndMax.length; i++)
        {
            if(minAndMax[i] > largest)
                largest = minAndMax[i];
            
            /*else if (minAndMax[i] < smallest)
            {
                smallest = minAndMax[i];
            */
      
        }   
        for(int i = 0; i > minAndMax.length; i++ ) 
        {
            if (minAndMax[i] < smallest)
                smallest = minAndMax[i];
        }
       
        System.out.println("Maximum Number: " + largest);
        System.out.println("Minimum Number: " + smallest);
    }
    
}

Richard MacCutchan

В дополнение к комментарию OriginalGriff вы должны установить наименьшее значение равным наибольшему, прежде чем начать второй цикл.

3 Ответов

Рейтинг:
2

Patrice T

Вы должны попытаться установить smallest и largest начальное значение после пользователь ввел значения.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

OriginalGriff

Потому что ваша петля никогда не входит в тело:

for(int i = 0; i > minAndMax.length; i++ ) 

Измените & gt; На & lt; - это должно сработать.


Рейтинг:
0

cvogt61457

int smallest = minAndMax[0];

Для чего инициализируется minAndMax[0]?

Установите наименьшее значение на максимально возможное значение и наибольшее значение на минимально возможное значение.
int smallest = Integer.MAX_VALUE;
int largest = Integer.MIN_VALUE;


Обычно значение по умолчанию, на которое будет инициализировано целое число, будет равно 0, если вы не укажете значение.
Если вы не введете отрицательное число, у вас уже есть 0 в самом маленьком.
Раскомментируйте код в первом цикле, но не используйте else. Избавьтесь от второго цикла, который имеет ошибку в операторе for - это не нужно.

for (int i = 0; i < minAndMax.length; i++)
{
    if(minAndMax[i] > largest)
        largest = minAndMax[i];        
    if (minAndMax[i] < smallest)
        smallest = minAndMax[i];
}


Member 13458860

@cvogt61457 почему int smallest = Integer.MAX_VALUE; работа? Можете ли вы объяснить, как это работает в моем коде

cvogt61457

Для "наименьшего" вы хотите установить его как можно большее значение. Тогда любое число, которое наберет пользователь, будет меньше этого.
Вы должны инициализировать 'largest' в MIN_VALUE, используя те же рассуждения.

Пример: когда "наименьший" инициализируется 0 и пользователь вводит числа с наименьшим введенным значением 5, то "наименьший" не является наименьшим введенным значением. При инициализации в MAX_VALUE любое значение, которое вводит пользователь, по определению будет меньше этого MAX_VALUE.

Вы также можете сделать это

for (...)
{
    smallest = Math.min(minAndMax[i], smallest);
    largest = Math.max(minAndMax[i], largest);
}