验证用户输入,检查输入是否为正数而不是字符串

时间:2018-03-09 17:31:50

标签: java validation input

我尝试编写一个程序,可以在进入下一部分之前验证用户的输入,但我目前仍然坚持这一点。每当我首先输入负值时,它将绕过条件或崩溃。

如果我输入" A" ,它会显示"请输入有效的数字"

如果我输入" -1",它将显示"请输入正数"

但是在我输入-1后不久,如果我输入另一个负值,则通过条件并接受负值,而输入字符将使程序崩溃。

我想在这里实现一个可以

的程序

检查输入是否为数字而不是字母或字符串,并检查其是否为正数



<div class="middleEllipsis">
    <div class="start">This is a really long file name, really long really long really long</div><div class="end">file name.txt</div>
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

如果isNumber小于0,您就不会将False设置为isNumber。这意味着,如果您输入了负值(并且您还没有在之前输入了一个字符串),你的程序会再次询问你另一个号码,它不会检查它是否为Truewhile,这意味着{{1}循环将不再运行。

要解决此问题,请将isNumber = False;添加到if (Users<0){代码块的末尾。

答案 1 :(得分:0)

我发现您的代码存在三个问题。第一个是即使输入为负数,isNumber也设置为true,所以我建议您在确认它不是负数后才将其设置为true。 / p>

第二个问题是,在if (Users < ) { ... }区块中,您获得了input.nextInt()。你应该直接进入do-while循环的下一次迭代,并在下一次迭代中获得下一个输入。

第三,您应该将isNumber初始化为false;

试试这段代码:

public static void main(String[] args) {
  Scanner input = new Scanner(System.in);
  int Users = 0;
  boolean isNumber = false;
  System.out.print("Enter the number of Users ");
  do {
    if (input.hasNextInt()) {
      Users = input.nextInt();
      if (Users < 0) {
        System.out.print("Please enter a positive number ");
        // Remove this line:
        // Users = input.nextInt();
      } else {
        // Moved this to an else block:
        isNumber = true;
      }
    } else {
      System.out.print("Please enter a valid number ");
      // remove this because it's already initialized to false:
      // isNumber = false;
      input.next();
    }
  } while (!(isNumber));
}