当前位置: 首页 > 知识库问答 >
问题:

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

杜砚
2023-03-14

我希望当用户的输入是非整数值、小于1的整数值或大于3的整数值时执行time循环。一旦输入有效,我将使用它。但是,循环仅在用户输入非整数值时起作用。我已经检查了逻辑,我仍然不确定出了什么问题。

代码:

  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个答案

施令雪
2023-03-14

我不完全确定这一点,但一个问题可能是多次调用< code>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();
 }
邓光赫
2023-03-14

“while”本身就很好。在这种情况下不需要“做”。以下是您的代码:

 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()))
 类似资料:
  • 我有一个家庭作业。。。代码如下。。。有几个问题要问。。。提前谢谢。Java初学者。。。如果这看起来很笨拙,请不要笑 有没有办法对我问的每个问题使用我的IF语句,而不必为每个问题更改字符串名称? 有没有办法创建一个方法(?)对于那些如果语句,所以我不必为我问的每一个问题写出来? 如果用户在10秒内没有输入答案,我想有一个定时器提示他们回答,我该怎么做?

  • 我是java的新手,我正在编写这个简短的程序,您可以在其中猜测1到10之间的数字。正确的数字存储为整数。如果您猜测较低的数字,它应该说“正确的数字较高”,如果您猜测较高,它应该说“正确的数字较低”。这是我所拥有的: 所以很明显这是行不通的,因为如果你输入一个更小的数字,它会跳到下一个数字,即使这个数字更大,它也是正确的。那么,我如何解决这个问题,让它检查两个语句呢?抱歉解释得不好。谢了。

  • 问题内容: 我试图通过一次添加一天来遍历while循环,但它甚至第一次都不会访问while循环。while循环中的条件正确吗?当我测试它时,它仅在一种情况下起作用,但在我添加第二种条件时停止了。 问题答案: 它应该是

  • 问题内容: 我在搜索“如何在for循环中提供多个条件?” 但是没有给出直接答案。 经过一番研究,我找到了正确的方法。条件不得以逗号(,)或分号(;)分隔。我们可以使用&&运算符将两个条件结合在一起。 for(初始化; condition1 && condition2;增量) 例: 希望这对新的Java开发人员有所帮助。 问题答案: 您还可以使用“或”运算符,

  • 我们在联系人列表中有一组表示不同人的对象。我们有一个 lookUpProfile 函数,它将 name 作为参数。该函数应检查姓名是否为实际联系人的名字。它将在控制台上打印联系人姓名,如果姓名与联系人的名字匹配,则为 true,否则,它将打印 false。 我想让我的while循环遍历数组,直到nameCheck等于true或者我的长度大于contact length(也就是它到达数组的末尾)。

  • 问题内容: 我有一个小代码问题,它适用于IDLE而不适用于Eclipse,我可以这样写吗: 代替这个: 谢谢。 问题答案: 使用和顺序: 它针对一个元组进行测试,哪个Python将方便而有效地将其存储为一个常量。您还可以使用设置文字: 但只有Python的最新版本(Python 3.2 和更高版本)才会将此视为不变的常量。对于更新的代码,这是最快的选择。 因为这是一个字符,所以您甚至可以使用字符串