有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么这个while循环使用“and”操作符而不是“or”?

“| |”不起作用,并在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) 个答案

  1. # 1 楼答案

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

    看看the documentation,我们可以看出,当输入耗尽时,会抛出NoTouchElementException。这告诉我你对Scanner类的使用有问题。事实证明,使用“||”or运算符,当input.hasNext()accCount <= 50中至少有一个为真时,循环将前进——因此,当不再有输入,而是accCount <= 50时,您将尝试读取第67行的下一个int,扫描仪将抛出异常,就像现在一样。使用&&可以避免这种情况,因为现在input.hasNext()accCount <= 50都必须是真的——也就是说,必须有有效的即将到来的输入和有效的帐号。这有意义吗

  2. # 2 楼答案

    &&;:它将检查,如果两个条件都满足,则只执行该块

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

    • 如果你看到错误,它在第67行,即“在 JAVAutil。扫描仪。nextInt(未知来源)”
    • 所以这仅仅意味着在你的条件下,第一个条件失败了 第二个很满意,因为你的街区被执行了。由于扫描仪没有下一个元素,if get也无法调用nextInt()方法
  3. # 3 楼答案

    | |运算符是or运算符。当代码检查条件(inputfile.hasNext() || accCount <= 50)时,如果inputfile.hasNext()accCount<=50为真,则将执行循环。这意味着,即使文件中没有任何内容可供读取,如果accCount小于或等于50,那么代码将运行,然后在尝试读取不存在的行时抛出错误