2016-01-27 4 views
1
x = input.nextInt(); 

while (!input.hasNextInt(x)) { 
    System.out.println("Enter a valid int"); 
    x = input.nextInt(); 
} 

while (x <=0 || x > 3) { 
    System.out.println("Choose a correct gear number: "); 
    x = input.nextInt(); 
} 

switch(x) { 
    case 1: 
     System.out.println("You're in Gear 1"); 
     break; 
    case 2: 
     System.out.println("Gear 2"); 
     break; 
    case 3: 
     System.out.println("Gear3"); 
} 

Я не могу понять, как непрерывно цикл запрашивать int, а x - это не int. Я пробовал так много всего. Каждый раз, когда я ввожу букву или комбинацию цифр, например Q или 23k или 2k и т. Д., Я получаю ошибку несоответствия. Я хочу, чтобы проверить, вводит ли пользователь что-то, что он не должен в моих методах.Как цитировать вопрос, является ли число целым?

+0

Я думаю, что существует метод System.in.read(); который читает один символ за раз, это вы можете использовать в своем цикле –

ответ

0
while(input.hasNext()) { 

if(input.hasNextInt()) { 
    x = input.nextInt(); 
    if(x <= 0 || x > 3) { 
    // throw exception or whatever your requirements is. 
    } 

    switch(x){ 
     case 1: 
     System.out.println("You're in Gear 1"); 
      break; 
     case 2: 
     System.out.println("Gear 2"); 
      break; 
     case 3: 
     System.out.println("Gear3"); 
    } 
} 




} 
1

Логика проста, если вы используете метод nextInt() класса Scanner читать ввод как 23k, который является строковое значение, оно будет сгенерировано inputmismatch исключение, так как он ожидает целое значение, но вы введите значение String.

Итак, вам нужно прочитать ввод как строку, используя метод next(), а затем проверить его на допустимое целочисленное значение или нет.

public static void main(String[] args){ 
     System.out.println("Entered inside the program...."); 
     Scanner console=new Scanner(System.in); 
     System.out.println("Enter an input..."); 
     String s=console.next(); 
     if(null==s || !isInt(s)){ 
      System.out.println("Entered input is not a valid integer:"+s); 
     } 
     System.out.println("Entered input is a valid integer"); 
    } 

    private static boolean isInt(String arg){ 
     try{ 
      Integer.parseInt(arg); 
      return true; 
     }catch(NumberFormatException nfe){ 
      return false; 
     } 
    } 
0

Я хочу, чтобы иметь возможность проверить, если пользователь ввода то, что он РЕКОМЕНДУЕМЫМ не в моих методах.

int x = 0; 
    while(x <=0 || x > 3){ 
    try { 
     System.out.println("Choose a correct gear number: "); 

     x = input.nextInt(); 
     } catch (InputMismatchException ex) { 
     System.out.println("Invalid input"); 
     input.nextLine();//the scanner can freely read the next 
     } 
    } 

Принимать входные значения 1, 2 и 3 только. Если вы введете какую-либо вещь, отличную от номера 24k, тогда этот код выдает исключение java.util.InputMismatchException и снова будет запрашивать ввод.

0
String str = "1 2 3 4 str"; 
    Scanner input = new Scanner(str); 
    while(input.hasNext()){ 
     if(input.hasNextInt()){ 
      int x = input.nextInt(); 
      switch(x) { 
       case 1: 
        System.out.println("You're in Gear 1"); 
        break; 
       case 2: 
        System.out.println("Gear 2"); 
        break; 
       case 3: 
        System.out.println("Gear3"); 
        break; 
       default : System.out.println("Number out of range"); 
      } 
     } 
     else { 
      System.out.println("Input not a integer::" + input.next()); 
     } 
    } 
0

Рабочий раствор:

import java.util.Scanner; 

общественного класса AskGear {

public static void main(String[] args) { 
    int choose = 0; 
    Scanner sc = new Scanner(System.in); 

    for (;;) { 
     System.out.println("Enter your choice: "); 
     if (!sc.hasNextInt()) { 
      System.out.println("only integers!: "); 
      sc.next(); // discard 
      continue; 
     } 

     choose = sc.nextInt(); 

     if (choose <= 0 || choose > 3) { 
      System.out.println("Choose a correct gear number"); 
      continue; 
     } 

     boolean choiceMade = false; 
     switch (choose) { 
     case 1: 
      System.out.println("You're in Gear 1"); 
      choiceMade = true; 
      break; 
     case 2: 
      System.out.println("Gear 2"); 
      choiceMade = true; 
      break; 
     case 3: 
      System.out.println("Gear3"); 
      choiceMade = true; 

     } 
     if (choiceMade) { 
      break; 
     } 
    } 

} 

}

Примечание: Если вы хотите, чтобы работать бесконечно, даже если пользователь вводит правильный механизм, вы может прокомментировать этот код:

if (choiceMade) { 
     break; 
    } 
Смежные вопросы