2016-05-26 2 views
2

У меня проблема. Предполагается, что код должен содержать 2-значные целые числа, где цифры разные. Если это не целое число, код сообщает вам и просит повторно войти. Если он как целое, но не соответствует условиям, он скажет вам, а затем предложит повторно войти. Все работает, за исключением случаев, когда вы вводите 0 для завершения цикла/программы. Я застрял на этом в течение 2 дней. Какие-либо предложения?диапазон и тип ввода подтверждение

int num = 1; 
    while (num != 0) { 
     System.out.print("Enter a 2-digit number. The digits should be different. Zero to stop: "); 
     while (!in.hasNextInt()) { 
      System.out.print("Not an integer, try again: "); 
      in.next(); 
     } 
     num = in.nextInt(); 
     while (num < 10 || num > 99) { 
      System.out.println("NOT good for your game!"); 
      System.out.print("Enter a 2-digit number. The digits should be different. Zero to stop: "); 
      while (!in.hasNextInt()) { 
       System.out.print("Not an integer, try again: "); 
       in.next(); 
      } 
      num = in.nextInt(); 
     } 
     if (equalDigs(num) == false) 
      System.out.println("NOT good for you game!"); 
     else 
      System.out.println("Good for your game! Play!"); 

    } 

} 
public static boolean equalDigs(int n) { 
    int d1 = n/10; 
    int d2 = n % 10; 

    if (d1 == d2) 
     return false; 
    else 
     return true; 
} 
+1

Вы должны использовать do-while для этого прецедента. Попытайтесь, это очень упростит проблему. –

ответ

0

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

public static void main(String[] args) throws Exception { 
    Scanner in = new Scanner(System.in); 
    int num; 
    do { 
    System.out.print("Enter a 2-digit number. The digits should be different. Zero to stop: "); 
    String input = in.next(); 
    try { 
     num = Integer.valueOf(input); 
     if(num == 0) { 
     break; 
     } 
     if(num < 10 || num > 99) { 
     System.out.println("NOT good for your game!"); 
     } else{ 
     if(input.charAt(0) == input.charAt(1)) { 
      System.out.println("NOT good for you game!"); 
     } else { 
      System.out.println("Good for your game! Play!"); 
     } 
     } 
    } catch (NumberFormatException ignored) { 
     System.out.print("Not an integer, try again: "); 
    } 
    } while (true); 
} 
+0

Цените его, но есть ли способ к нему без исключений? Это интро-класс, и мы не перешли все это. –

0

Один способ реорганизовать код будет читать в String из командной строки вместо чтения номера, а затем проверки, что вход, чтобы убедиться, что удовлетворяет следующие условия:

  • длина входного сигнал два символа
  • оба символа являются числами
  • первым и другие номера уникальны

Я создал метод под названием validate(), который делает тяжелый подъем для этого. Это оставляет ваш метод main() фокусировкой только на опросе пользователя для ввода, пока проверка не выполняется.

public static boolean validate(String input) { 
    // check that input length is two characters 
    if (input.length() != 2) { 
     return false; 
    } 
    // check that a two digit number was entered 
    if (Character.getNumericValue(input.charAt(0)) < 0 || Character.getNumericValue(input.charAt(0)) > 9 || 
     Character.getNumericValue(input.charAt(0)) < 0 || Character.getNumericValue(input.charAt(0)) > 9) { 
     return false; 
    } 
    // check that first and second numbers are unique 
    if (input.charAt(0) == input.charAt(1)) { 
     return false; 
    } 

    return true; 
} 

public static void main(String[] args) { 
    Scanner reader = new Scanner(System.in); 
    String input; 
    do { 
     System.out.println("Enter a 2-digit number. The digits should be different. Zero to stop: "); 
     input = reader.next(); 
     if (!validate(input)) { 
      System.out.println("NOT good for your game!"); 
     } 
     else { 
      break; 
     } 
    } while(true); 

    System.out.println("Good for your game! Play!"); 
    // you can also use the value of 'input' here if needed 
} 
+0

Оцените, но можете ли это сделать без String и .getNumericalValue, потому что мы еще не научились .getNu ... и вы должны вводить int's not Strings. –

+0

Преимущество решения mg заключается в том, что пользователь может вводить все, что захочет. Если ввод не является числовым, код просто отклонит его и снова запросит. –

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