2013-10-09 3 views
0

Я создал программу с помощью сканера, чтобы взять в ряд от пользователя и сохранить его на «а», когда это целое число от 1 до 100. Пожалуйста, смотрите файл Java ниже:Консольные Игнорирование входы

public class Parity_Check { 
    private static Scanner sc; 

    public static void main(String[] args) throws InterruptedException { 

    sc = new Scanner(System.in); 
    int a, b; 
    System.out.print("Enter a number  between 1 and 100: "); 

    while(true) { 
     b = 0; 
     if(!sc.hasNextInt()) { 
     System.out.print("That isn't an integer! Try again: "); 
     sc.next(); 
     } 
     else{ 
     b = sc.nextInt(); 
     if(b < 1 || b > 100) { 
      System.out.print("That integer isn't between 1 and 100! Try again: "); 
      sc.next(); 
     } 
     else{ 
      a = b; 
      break; 
     } 
     } 
    } 
    System.out.print("The number is: "+a+"."); 
    } 
} 

Проблема, с которой я столкнулся, заключается в следующем: После того, как программа вернет «Это целое число не от 1 до 100! Повторите попытку: «он ждет два входа от пользователя (а не тот, который он должен), первый из которых полностью игнорируется! Вот сеанс консоли я побежал, чтобы проиллюстрировать эту проблему:

"Enter a number between 1 and 100: 2.5 
That isn't an integer! Try again: 101 
That integer isn't between 1 and 100! Try again: Apple. 
42 
The number is: 42.” 

Как вы можете видеть, что даже не обратил внимания на вход "Apple". я полностью потерял, почему это не работает, как это должно , например, так:

"Enter a number between 1 and 100: 2.5 
That isn't an integer! Try again: 101 
That integer isn't between 1 and 100! Try again: Apple. 
That isn't an integer! Try again: 42 
The number is: 42.” 

Я новичок в Java так что ответ, который хорошо объяснил бы находкой; Меня больше интересует, почему это не работает, как исправить это, потому что, надеюсь, я смогу научиться.

Я использую последнюю версию 64-битного Eclipse, кстати.

ответ

0

Здесь вы уже удалили int из потока, поэтому вам нужно удалить что-нибудь еще. Вынуть вызов sc.next():

b = sc.nextInt(); 
    if(b < 1 || b > 100) { 
     System.out.print("That integer isn't between 1 and 100! Try again: "); 
     // sc.next(); remove this 
    } 

Обратите внимание, как это отличается от ситуации с ранее Условный оператор: если пользователь в то, что это не число, которое вы должны удалить его из поток, вызвав next(), потому что ничто другое не удалит его иначе. Здесь вызов nextInt уже удаляет входные данные из потока.

+0

А, так что я удаляю целое число из потока, когда я устанавливаю его на него? Отличный ответ, большое спасибо! – DanielDC88

0

Sc.next() в вашем операторе if не требуется, и ваш код пропускает следующий ввод от пользователя. Ниже приведенный ниже фрагмент кода работает правильно.

private static Scanner sc; 

public static void main(String[] args) throws InterruptedException { 

    sc = new Scanner(System.in); 
    int a, b; 
    System.out.println("Enter a number  between 1 and 100: "); 

    while(true) { 
     b = 0; 
     if(!sc.hasNextInt()) { 
      System.out.println("That isn't an integer! Try again: "); 
      sc.next(); 
     } 
     else { 
      b = sc.nextInt(); 
     } 
     if(b < 1 || b > 100) { 
      System.out.println("That integer isn't between 1 and 100! Try again: "); 
     } 
     else { 
      a = b; 
      break; 
     } 
    } 
    System.out.println("The number is: "+a+"."); 
    return; 
} 
+0

Я думаю, что вы, возможно, удалили неправильный «СБН. следующий();" но я сработал. = P Спасибо большое! – DanielDC88

+0

Я получил там, в конце концов, хаха –

0

попробуйте ниже основной он будет работать

государственной статической силы основных (String [] арг) бросает InterruptedException {

sc = new Scanner(System.in); 
int a, b; 
System.out.print("Enter a number  between 1 and 100: "); 

while(true) { 
    b = 0; 
    if(!sc.hasNextInt()) { 
    System.out.print("That isn't an integer! Try again: "); 
    sc.next(); 
    } 
    else{ 
    b = sc.nextInt(); 
    if(b < 1 || b > 100) { 
     System.out.print("That integer isn't between 1 and 100! Try again: "); 
    } 
    else{ 
     a = b; 
     break; 
    } 
    } 
} 
System.out.print("The number is: "+a+"."); 

}

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