2017-02-03 3 views
0

ЦелеваяКаков правильный способ предотвращения выхода программы после того, как пользователь вводит неверный ввод в Java?

Разработка и внедрение приложение, которое считывает целое значение и выводит сумму всех четных целых чисел от 2 до его ввода значения включительно. Распечатайте сообщение об ошибке, если входное значение меньше 2. Подскажите соответственно.

Примечание: урок был на то время петли, а не другие циклы, такие как цикл и т.д.

Этот вопрос

у меня все работает, но что-то о том, как у меня есть это неправильно. У меня есть цикл while while(programOn), чтобы программа работала. без этого цикла while, если пользователь вводит номер < 2, пользователя попросят повторить попытку, однако, если пользователь снова попытается, программа выйдет вместо запуска нового ввода в программу. Итак, я создал цикл while, чтобы принудительно открыть программу, пока пользователь не наберет приемлемый ввод.

- что-то об этом чувствует себя взломанным и неправильным, я бы очень признателен за некоторые валидации моего метода.

public static void main(String[] args){ 
int inputNumber; 
int sum = 0; 

boolean programOn = true; 

Scanner scan = new Scanner(System.in); 

System.out.println("Please Type a number no smaller than 2"); 
inputNumber = scan.nextInt(); 

//include the original input to sum 
sum = inputNumber; 

while(programOn){ 
    if(inputNumber < 2){ 
     System.out.println("you need a number greater than or equal to 2, try again"); 

     inputNumber = scan.nextInt(); 
     sum = inputNumber; 

    }else{ 

    //from the number chosen divide until you reach 0 

    while(inputNumber != 0){ 

     //subtract one from the number 
     inputNumber = (inputNumber - 1); 

     if((inputNumber % 2 == 0) && (inputNumber != 0)){ 
     System.out.println(inputNumber); 
     //add the input to the sum 
     sum += inputNumber; 
     } 
    } 
     System.out.println("The sum is " + sum); 
     programOn = false; 
    } 
} 


} 
+0

Какой вклад пользователь должен дать, чтобы выйти из цикла как запланировано? – Alex

ответ

3

Это потому, что проверка выполняется с помощью if условия. Что вам здесь нужно, это while цикл, который продолжает спрашивать для входов до тех пор, как пользователя input является less than 2, ниже приведен фрагмент кода, который делает это:

Scanner scan = new Scanner(System.in); 

System.out.println("Please Type a number no smaller than 2"); 
int inputNumber = scan.nextInt(); 

while(inputNumber < 2){ 
    System.out.println("you need a number greater than or equal to 2, try again"); 
    inputNumber = scan.nextInt(); 
} 

System.out.println(inputNumber); 
+0

Но лучшее решение, если он перемещает 'scan.nextInt()' внутри основного цикла while. В этом случае его проверка будет корректно работать без второго цикла. Возможно, это лучшее решение. – eg04lt3r

+0

Большое спасибо, теперь это кажется таким очевидным. Можно ли иметь два цикла? например, один пример, который вы дали, а затем еще один под ним для 'inputNumber! = 0'? или есть более элегантный способ написать это? – cdm89

+0

@ eg04lt3r Вы имеете в виду while (programOn) или while (inputNumber <2)? спасибо – cdm89