只让用户输入正整数(没有小数或字符串)?

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

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."); 

这可能是一个approch:

  • 使用Scanner.readLine();读取输入作为stringScanner.readLine();
  • 尝试使用Integer.parseInt方法将字符串转换为int。 如果输入字符串包含小数和无效数字,则此方法将抛出NumberFormatException
  • 如果在上一步中正确解析了输入值,则检查是否为负数
 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: "); } } 

我假设“输入”是Scanner类。 如果是这样,请查看Scanner.nextInt()方法的javadoc。 如果未输入整数,则会引发许多exception。 所以你应该在try catch块中调用它并查找这些exception。 接下来你可以做的就是让它们输入负值只是检查输入是否小于0,如果是,输出一些消息让用户知道它们只能输入正值。

您的尝试看起来很好,您让用户输入内容,然后检查它是否与所需的表单匹配。 如果没有,继续再次询问用户或输出错误或其他。 如果你想以某种方式制作程序,那些字母,比如’ – ‘字符在输入时甚至不会出现在屏幕上,你仍然必须阅读用户键入的内容,validation它,改进字符串(删除非法字母)并在每次单击按键时刷新屏幕。 这可能不是应该在这里做的。

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

我不确定究竟是什么类input ,但我认为它的Scanner读取标准。如果是这种情况,你可以利用nextInt()抛出的exception,特别是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.");