为什么while循环使用“和”运算符而不是“或”运算符?

时间:2019-06-26 02:02:22

标签: java boolean-operations

“ ||”不起作用,并在while循环中给出错误消息。 “ &&”确实是我需要的,但是我很好奇为什么它只能那样工作。

这是针对学校的家庭作业项目。 &&正常运行,并且没有错误消息。我还尝试过将各个表达式放在括号中并进行切换,但没有一个起作用。

//Below is line 29 in main calling the function
accCount = readAccts(acctNum, balance, MAX_NUM, inputfile);

//actual function attempting to read in data to an array
public static int readAccts(int[] acctNum, double[] balance,
            int MaxAccts, Scanner inputfile)
{
    int accCount = 0;

    //loop inputs account number and balance into array
    while(inputfile.hasNext() || accCount <= 50) {
                    //Line below is line 67 mentioned in error message
        acctNum[accCount] = inputfile.nextInt();
        balance[accCount] = inputfile.nextDouble();
        accCount++;
}

使用“ ||”时收到编译错误消息:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at bankAccount.readAccts(bankAccount.java:67)
    at bankAccount.main(bankAccount.java:29)

3 个答案:

答案 0 :(得分:3)

|| operator是or运算符。当您的代码检查条件(inputfile.hasNext() || accCount <= 50)inputfile.hasNext()还是accCount<=50为真时,将执行循环。因此,即使文件中没有任何内容可供读取,如果您的accCount小于或等于50,则代码将运行并在尝试读取不存在的行时引发错误。 。

答案 1 :(得分:2)

您的while循环检查两个条件:input.hasNext()accCount <= 50。如果查看堆栈跟踪,不仅从代码的第67行引发异常,而且该异常来自Scanner类本身。

the documentation,我们可以知道输入耗尽时会引发NoSuchElementException。这告诉我,您对Scanner类的使用与某些情况有关。结果是“ ||”或运算符,当input.hasNext()accCount <= 50中的至少一个为true时,循环前进-因此,当没有更多输入但accCount <= 50时,您将尝试读取下一个int第67行,扫描程序将抛出异​​常,就像现在所做的那样。使用&&可以避免这种情况,因为现在input.hasNext()accCount <= 50都必须为真-也就是说,必须有有效的即将到来的输入和有效的帐号。这有道理吗?

答案 2 :(得分:0)

&&:它将检查是否同时满足两个条件,则仅执行该块。

|| :它将检查第一个条件,如果满足则执行该程序段。      如果第一个条件失败,它将检查第二个条件。

  • 如果看到错误,则在第n行。 67即 java.util.Scanner.nextInt(未知来源)”。
  • 所以这只是意味着在您的情况下,第一个条件失败了 和2nd感到满意,因为您的程序块得以执行。而且由于您的扫描仪没有下一个元素,因此如果调用nextInt()方法也失败。