6

我知道如何要求用户输入正整数,但我不知道如何处理代码以避免输入错误,例如小数或字符串输入。

  int seedValue;
  double angle, gunpowder;

  System.out.println("Please enter a positive integer seed value: ");
  seedValue = input.nextInt();

     while (seedValue <= 0) {  
        System.out.println("Please enter a positive integer seed value: ");
        seedValue = input.nextInt();
     }

     System.out.println("That target is " +
      threeDec.format(gen.nextDouble() * 1000) + "m away.");
4

5 回答 5

8

这可能是一个方法:

  • string使用_Scanner.readLine();
  • 尝试使用Integer.parseInt方法将字符串转换为 int。如果输入字符串包含小数和无效数字,此方法将抛出一个NumberFormatException
  • 如果在上一步中正确解析了输入值,则检查是否为负
于 2013-09-14T18:13:02.297 回答
1
System.out.println("Please enter a positive integer seed value: ");
boolean flag = true;
while(flag) {
  try {
    seedValue = Integer.valueOf(input.nextLine());
    if (seedValue <= 0) {
      System.out.println("input is not a positive Integer ");
      System.out.println("Please enter a positive integer seed value: ");
    } else {
      flag=false;
    }
  } catch(NumberFormatException e) {
      System.out.println("input is not a positive Integer ");
      System.out.println("Please enter a positive integer seed value: ");
  }

}
于 2013-09-14T18:17:33.603 回答
0

我假设“输入”是 Scanner 类。如果是这样,请查看 Scanner.nextInt() 方法的 javadoc。如果未输入整数,则会引发许多异常。所以你应该把你的调用放在一个 try catch 块中并寻找这些异常。由于仍然允许他们输入负值,因此您可以做的下一件事就是检查输入是否小于 0,如果是,则输出一些消息,让用户知道他们只能输入正值。

于 2013-09-14T18:16:26.000 回答
0

您的尝试看起来不错,您让用户输入一些内容,然后检查它是否与所需的表单匹配。如果没有,请继续再次询问用户或输出错误或其他内容。如果您想以某种方式制作程序,诸如“-”字符之类的字母在输入时甚至不会出现在屏幕上,您仍然必须阅读用户输入的任何内容,对其进行验证,修改字符串(删除非法字母)并在每次击键时刷新屏幕。这可能不是这里应该做的。

想象一下您的常用社交网站,同时创建具有密码要求的个人资料,例如有一个数字、至少 6 个字母等。您可以在文本框中输入您想要的任何内容,只有在提交表单后,程序才会接受您的输入或将您重定向到相同的表单并显示错误消息以提示问题。

于 2013-09-14T18:17:49.117 回答
0

我不确定到底input是什么类,但我假设它是Scanner从标准中读取的。如果是这种情况,您可以利用 . 抛出的异常nextInt(),特别是InputMismatchException. 您的代码将是 -

int seedValue;
double angle, gunpowder;

System.out.println("Please enter a positive integer seed value: ");
while(invalidInput){
   try{
     seedValue = input.nextInt();
     if(seedValue <= 0) {  
            System.out.println("Please enter a positive integer seed value: ");
     }
     else{invalidInput=false;}
   }
   catch(InputMismatchException e){
        System.out.println("Please enter a positive integer seed value: ");
   }

}

     System.out.println("That target is " +
      threeDec.format(gen.nextDouble() * 1000) + "m away.");
于 2013-09-14T18:19:38.373 回答