2013-03-03 2 views
0

Каков наилучший способ получения действительного целого числа от пользователя, который находится в указанном диапазоне (0,20) и является int. Если они вводят неверную ошибку с печатью целого числа.Проверка ввода с циклом while и сканером

Я имею в виду что-то вроде:

int choice = -1; 
while(!scanner.hasNextInt() || choice < 0 || choice > 20) { 
     System.out.println("Error"); 
     scanner.next(); //clear the buffer 
} 
choice = scanner.nextInt(); 

правильно ли это или есть способ лучше?

+1

этот код делать то, что вы ожидаете ли? если да, то каков ваш вопрос, если нет, то какая ошибка? – iTech

+0

, даже если я набираю число, находящееся внутри диапазона, он просто продолжает печатать ошибку – user1874239

ответ

1

Вы можете сделать что-то вроде этого:

Scanner sc = new Scanner(System.in); 
int number; 
do { 
    System.out.println("Please enter a valid number: "); 
    while (!sc.hasNextInt()) { 
     System.out.println("Error. Please enter a valid number: "); 
     sc.next(); 
    } 
    number = sc.nextInt(); 
} while (!checkChoice(number)); 

private static boolean checkChoice(int choice){ 
    if (choice <MIN || choice > MAX) {  //Where MIN = 0 and MAX = 20 
     System.out.print("Error. "); 
     return false; 
    } 
    return true; 
} 

Эта программа будет постоянно спрашивать для входа, пока не получит правильный один.

Убедитесь, что вы понимаете, каждый шаг программы ..

+0

Я просто попробовал это, и если выбор не является первым в первый раз, он выдает исключение InputMismathException. – user1874239

+0

См. Мой отредактированный ответ. – Maroun

1

Где вы изменить выбор внутри вашего время цикла? Если он не изменен, вы не можете ожидать его использования в логическом состоянии if-блока.

Вам нужно будет проверить, что сканер не имеет int, и если он делает, у вас есть int, получите выбор и проверьте это отдельно.

псевдокод:

set choice to -1 
while choice still -1 
    check if scanner has int available 
    if so, get next int from scanner and put into temp value 
    check temp value in bounds 
    if so, set choice else error 
    else error message and get next scanner token and discard 
done while 
Смежные вопросы