java while循环中的多个和/或条件

时间:2016-02-17 15:25:58

标签: java loops while-loop logic

我想在用户的输入是非整数值,小于1的整数值或大于3的整数值时执行while循环。一旦输入有效,我将使用它。但是,循环仅在用户输入非整数值时有效。我已经完成了逻辑,我仍然不确定是什么问题。

代码:

  Scanner scnr = new Scanner(System.in);
  do {

     System.out.println("Please enter an integer value 1-3 for the row.");

     while((scnr.hasNextInt() && (scnr.nextInt() > 3)) || (scnr.hasNextInt() && (scnr.nextInt() < 1)) || (!scnr.hasNextInt()))
     {

        System.out.println("Your input is not valid.");
        System.out.println("Please enter an integer value 1-3 for the row.");
        scnr.next();
     }
     row = scnr.nextInt() - 1;

2 个答案:

答案 0 :(得分:1)

“虽然”本身运作良好。在这种情况下不需要“做”。这是你的代码:

 Scanner scnr = new Scanner(System.in);

 System.out.println("Please enter an integer value 1-3 for the row.");

     while((scnr.hasNextInt() && (scnr.nextInt() > 3)) || (scnr.hasNextInt() && (scnr.nextInt() < 1)) || (!scnr.hasNextInt()))
     {
        System.out.println("Your input is not valid.");
        System.out.println("Please enter an integer value 1-3 for the row.");
        scnr.next();
     }
     int row = scnr.nextInt() - 1;

当你想要至少执行一次代码然后检查“while”条件时,你需要“do”。

每次调用nextInt实际上都需要输入中的下一个int。所以,最好只使用一次:

int i;
while((i=scnr.hasNextInt() && (i > 3)) || (scnr.hasNextInt() && (i < 1)) || (!scnr.hasNextInt()))

答案 1 :(得分:0)

我对此并不完全确定,但问题可能是多次调用scnr.nextInt()(因此您可能会将值赋予字段以避免这种情况)。 一个易于阅读的解决方案是在他的评论中引入一个名为@Vikrant的测试变量,例如:

 System.out.println("Please enter an integer value 1-3 for the row.");
 boolean invalid=true;
 int input=-1;

 while(invalid)
 {
    invalid=false;
    if(scnr.hasNextInt())
         input=scnr.nextInt();
    else
         invalid=true;
    if(input>3||input<1)
         invalid=true;
    if(!invalid)
        break;
    System.out.println("Your input is not valid.");
    System.out.println("Please enter an integer value 1-3 for the row.");
    scnr.next();
 }