Java 仅允许用户输入正整数(无小数或字符串)?

Java 仅允许用户输入正整数(无小数或字符串)?,java,string,input,integer,Java,String,Input,Integer,我知道如何要求用户输入正整数,但我不知道如何处理代码以避免输入错误,例如十进制或字符串输入 int seedValue; double angle, gunpowder; System.out.println("Please enter a positive integer seed value: "); seedValue = input.nextInt(); while (seedValue <= 0) { System.out.pri

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

  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.");
int-seedValue;
双角度,火药;
System.out.println(“请输入一个正整数种子值:”);
seedValue=input.nextInt();

而(种子值这可能是一种方法:

  • 使用
    Scanner.readLine();
  • 尝试使用
    Integer.parseInt
    方法将字符串转换为int。如果输入字符串包含小数和无效数字,此方法将抛出
    NumberFormatException
  • 如果在上一步中正确解析了输入值,则检查是否为负值
我假设“input”是Scanner类。如果是,请查看Scanner.nextInt()的javadoc方法。如果未输入整数,它会引发许多异常。因此,您应该将对它的调用放在try-catch块中,并查找这些异常。下一步您可以做的事情是,检查输入是否小于0,如果是,则输出一些消息,让用户知道他们必须输入负值er是一个正值。

System.out.println(“请输入一个正整数种子值:”);
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: ");
  }

}
布尔标志=真; while(旗帜){ 试一试{ seedValue=Integer.valueOf(input.nextLine());
如果(seedValue您的尝试看起来不错,您让用户输入一些内容,然后检查它是否与所需的表单匹配。如果不匹配,请再次询问用户或输出错误或其他任何内容。如果您希望以某种方式制作程序,在输入时,屏幕上甚至不会出现诸如“-”字符之类的字母,您仍然需要读取任何内容用户输入、验证、修改字符串(删除非法字母)并在每次击键时刷新屏幕。这里可能不应该这样做


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

Im不确定输入的类是什么,但我假定它的扫描仪是从标准中读取的。如果是这种情况,您可以利用由
nextInt()
引发的异常,特别是
inputmaschException
。您的代码将是-

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: ");
   }

作为旁注,您不需要第一个输入部分
println(…
seedValue=…
。循环中的一个就足够了。@Tharwen:只要你将
seedValue
初始化为负数,或者在
循环时使用
do
否则,Java会抱怨你使用了未初始化的值,或者循环将永远不会运行。Java不是初始化了吗e ints to 0?@Tharwen:对于类和实例变量,是的。但是局部变量,不是的——Java不会初始化它们(JLS7,§4.12.3/7),编译器在看到您为它们指定了值之前不会让您读取它们(§16)。有更好的方法来实现这一点。我不认为现在有什么可以真正改变的东西可以为这个线程增加价值。@redFIVE:你可能是对的。但是这并没有给我们停止改进一个糟糕的答案的理由,对吗?;)如果我要做这样的事情,我会(a)去掉该标志,将
while(flag)
更改为
while(true)
flag=false;
更改为
break;
,(b)在
种子值时抛出异常实际上,a
do…while
将完全消除
中断的需要。伪代码:
do{show prompt;get input;try{convert;}catch{input=-1;}如果输入,如果用户输入字母,则代码将进入无限循环否。如果输入字母,则触发catch块。这将导致另一个提示并(正确)重新启动循环。这不是因为退出条件,而是因为扫描仪…当nextInt()时抛出异常扫描程序没有移动,它只是继续从同一位置再次发送相同的输入,形成无限循环抛出InputMismatchException。更好的解决方案是使用Integer.valueOf(input.nextLine())在catch clauseno中使用NumberFormatException,它确实进入了一个无限循环……检查我上面的评论
     System.out.println("That target is " +
      threeDec.format(gen.nextDouble() * 1000) + "m away.");