У меня есть эта проблема с циклом while здесь:
while((input = InputHandler.getInt()) != 1 && input != 2){
if(input == InputHandler.CODE_ERROR)
System.out.print("Input must be a number");
}
Этот цикл while принимает вход только один раз и больше не запрашивает его, поэтому он циклически вводит этот вход, который принимается один раз все время. Что я делаю неправильно здесь, потому что для меня это действительно странно, что этот цикл улыбок работает?
Класс InputHandler:
public class InputHandler {
public static Scanner in = new Scanner(System.in);
public static int CODE_ERROR = -6;
public static int getInt(){
try{
return in.nextInt();
} catch(InputMismatchException e){
return CODE_ERROR;
}
}
}
В настоящее время ваш код вводит бесконечный цикл, если в командной строке вводится не целое число. Это связано с тем, что ваш in.nextInt()
исключение и оставил в сканере оскорбительное значение.
Вам нужно использовать недопустимый токен, вызвавший ваше исключение, вызвав in.next();
:
public static void main(String[] args) throws Exception {
int input;
while ((input = InputHandler.getInt()) != 1 && input != 2) {
if (input == InputHandler.CODE_ERROR)
System.out.print("Input must be a number");
}
}
public static class InputHandler {
public static Scanner in = new Scanner(System.in);
public static int CODE_ERROR = -6;
public static int getInt(){
try{
return in.nextInt();
} catch(InputMismatchException e){
in.next(); // <------------------ this should solve it
return CODE_ERROR;
}
}
}
Я запустил код, который работает нормально и каждый раз запрашивает ввод, и когда я выдаю 2 или 1 цикл. Вот пример кода, который я запускал: -
package testing;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test123 {
public static Scanner in = new Scanner(System.in);
public static int CODE_ERROR = -6;
public static int getInt(){
try{
String in1 = in.next();
return Integer.parseInt(in1);
//return in.nextInt(); <-- This is leading to error
} catch(Exception e){
return CODE_ERROR;
}
}
public static void main(String[] args) {
int input;
while((input = Test123.getInt()) != 1 && input != 2){
if(input == Test123.CODE_ERROR)
System.out.print("Input must be a number");
System.out.println("\nWrong number: "+input+" Please try again.");
//input = Test123.getInt();
}
}
}
Я не понимаю, почему вы столкнулись с проблемой?
while
петля будет evaluted каждый раз , когда он закругляется, так что не должно быть проблемой.
input
одновременно равны 1 и 2. Это не произойдет. Для любого значения либоinput != 1
либоinput != 2
будет истинным ... Я подозреваю, что вы хотите&&
.