2012-10-13 3 views
1

Привет, я начинаю программировать Студент, и я практикую использование циклов для проверки ввода. К сожалению, цикл работает, но полностью пропускает внутренний цикл ... Я получаю сообщение об ошибке или подсказку ...Почему Java-программа пропускает мой внутренний цикл?

Вот мой код: [Я ЗАЯВЛЯЛ ЭТО ОТ ОТВЕТА НА ЭТОМ САЙТЕ О ВАЛИДИРОВАННОМ ВХОДЕ, И КОГДА МОЖЕТ ИСПЫТАТЬ IT-.]

import java.util.Scanner; 

public class ValidationTest 
{ 
public static void main(String[] args) 
{ 
    Scanner sc = new Scanner(System.in); 
    int number; 
    do { 
     System.out.println("Please enter a positive number!"); 
     while (!sc.hasNextInt()) 
     { 
      System.out.println("That's not a number!"); 
      sc.next(); // this is important! 
     } 
     number = sc.nextInt(); 
     } while (number <= 0); 
    System.out.println("Thank you! Got " + number); 
} 
} 
+0

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

ответ

0

Внутренний цикл:

while (!sc.hasNextInt()) 
    { 
     System.out.println("That's not a number!"); 
     sc.next(); // this is important! 
    } 
    number = sc.nextInt(); 

проверить только, если ваш вход не является числом, если вход -123, функция !sc.hasNextInt() является ложным, так что пропущу цикл, если вы хотите, чтобы проверить число отрицательно, добавьте эту проверку после значения присвоит ему номер:

if(number <= 0){ 
    System.out.println("The number is negative!"); 
} 

Вы не должны сделать еще один цикл для проверки количества отрицательно или не из первого контура были, и do...while цикла будет сделать убедитесь, что вам нужно запустить цикл хотя бы один раз

+0

Большое вам спасибо, я не могу поверить, что ответ был таким простым. > В-Д –

0

while цикл будет пропущен, если условие (в скобках после while) является ложным, когда цикл while сначала выполняется.

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

Если вы не знаете, как использовать отладчик, остановите все, что вы делаете, и выполните некоторые поисковые запросы Google или что-то еще, что вам нужно сделать, чтобы узнать, как его использовать.

0

Ваш номер int NaN (не номер). Попробуйте установить его на -1, чтобы вы могли ввести первый цикл. Во втором цикле sc никогда не просматривал ввод, он только инициализирован.

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