Разрабатываю программу для занятий.

Мне нужно прочитать ввод пользователя с помощью класса сканера. Затем мне нужно передать эти данные в список массивов с помощью цикла while. В моем цикле while мне нужен условный оператор, чтобы проверить, введено ли 0 или отрицательное число.
Если пользователь вводит отрицательное число или 0, цикл заканчивается, и код переходит к следующему процессу ...

В настоящее время я сталкиваюсь с следующими проблемами:

-Все мои входные значения не обрабатываются

-Мне нужно ввести значение 0 3 раза, чтобы выйти из цикла

-0 передается в мой список массивов, который я не хочу

Вот мой код:

import java.util.*; 
public class questionAvg3
{
public static void main(String[]args)
{

Scanner input_into = new Scanner(System.in);
ArrayList<Integer> collector = new ArrayList<Integer>();
System.out.println("Enter 0 or a negative number to end input");
System.out.println("Enter a positive integer to populate the arraylist");


    while ((input_into.nextInt() !=0) || (input_into.nextInt() < 0)){
    System.out.println("Type another int or exit");
        collector.add(input_into.nextInt());
    }

    int minValue = collector.get(0);
    int maxValue = collector.get(0); 
    //int avgValue = collector.get(0);
    //int total = 0;
    for(Integer i: collector){
        if( i < minValue) minValue = i;
        if( i > maxValue) maxValue = i;
    }       
    System.out.println("The max value int is: " + maxValue);
    System.out.println("The min value int is: " + minValue);

}
}
3
AnthonyJ 21 Окт 2015 в 20:56

3 ответа

Лучший ответ

Ваша проблема прямо здесь:

while ((input_into.nextInt() !=0) || (input_into.nextInt() < 0)){
System.out.println("Type another int or exit");
    collector.add(input_into.nextInt());
}

Причина, по которой вам нужно ввести 0 три раза, заключается в том, что вы звоните input_into.nextInt() 3 раза!

Это означает, что ваша программа ожидает целого числа, оценивает ввод на основе вашего сравнения, затем делает это снова и, наконец, в последний раз для вашего collector.add().

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

Например, когда вы говорите (input_into.nextInt() !=0) || (input_into.nextInt() < 0), вы буквально говорите, что число меньше нуля или больше нуля. Поскольку ваше контрольное значение - это любое число, которое <= ноль, вы хотите продолжить, только если ваш ввод БОЛЬШЕ нуля. Это дает вам следующее

    int input = input_into.nextint();
    while (input > 0){
       System.out.println("Type another int or exit");
       collector.add(input);
       input = input_into.nextint();
    }
1
Evan Bechtol 21 Окт 2015 в 18:03

Использовать переменную внутри цикла и использовать ее для проверки условия продолжения цикла

  int variable=input.nextInt(); //get initial input

  while (variable<=0)
    {
        //get next input
        variable=input.nextInt();
    }//end while

Это будет повторяться до тех пор, пока ввод не станет <= 0

0
Daniel Maclam 21 Окт 2015 в 18:08
while ((input_into.nextInt() !=0) || (input_into.nextInt() < 0)){
    System.out.println("Type another int or exit");
        collector.add(input_into.nextInt());
    }

Для этого действительно нужно 3 целых числа. Потому что nextInt всегда ищет следующее входное значение.

Вам нужно

int input = input_into.nextInt();
  while ((input !=0) || (input < 0)){
        System.out.println("Type another int or exit");
            collector.add(input);
            input = input_into.nextInt();
        }
5
Suresh Atta 21 Окт 2015 в 18:07