2015-10-21 3 views
3

Я разрабатываю программу для класса.Создание условного оператора для ввода со сканером

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

Проблемы я в настоящее время сталкивается являются:

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

-I должны ввести значение 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); 

} 
} 

ответ

1

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

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

Отлично, спасибо. И для того, чтобы помочь мне лучше понять и решить мою проблему. – AnthonyJ

+0

@ AnthonyJ Очень приветствую, Энтони! –

+0

@AnthonyJ Я бы посоветовал вам изменить цикл на то, что у меня выше, его немного легче читать и на самом деле лучше по производительности, потому что вы делаете меньшее сравнение за итерацию, чем ваша начальная настройка цикла. –

5
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(); 
     } 
+0

Это создает бесконечный цикл. Вы должны обновить свой 'input' в конце вашего цикла while. – gonzo

+0

Я реализовал это, но теперь я застрял в бесконечном цикле печати «Введите другой int или exit» – AnthonyJ

+1

@AnthonyJ Просто добавьте 'input = input_into.nextInt();' в конец вашего цикла while. – gonzo

0

использовать переменную внутри цикла и использовать его, чтобы проверить условие цикла ПРОДОЛЖЕНИЕ

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

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

Это будет цикл до входа в < = 0

Смежные вопросы