2016-05-26 158 views
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

欣赏,但它可以做到没有字符串和.getNumericalValue,因为我们还没有学习.getNu ...,你应该输入int的字符串 –

+0

mg解决方案的优点是,用户可以输入他想要的任何东西。如果输入是非数字的,代码会简单地拒绝它并再次询问。 –