读取用户输入:未输入任何值 v 输入一个值

Reading user input: No value entered v one value entered

我的方法之一有问题:

public static int readIntoArray(Scanner input, int[] nums) {
    int i = 0; 
    int count = 0; //Will hold the number of values in array

    if (input.hasNextInt() == false) {
        count = 0;
    }

    else{
        int num = input.nextInt();

        do {
            nums[i] = num;
            i++;
            count++;
            num = input.nextInt();
            if (input.hasNextInt() == false) {
                nums[i] = num;
                count++;
            }
            else {

            }
        } while(input.hasNextInt() && i < 100);
    }

    return count;
}

这是我程序中的一种方法。我之前的问题是,如果用户在没有输入任何值的情况下按回车键,我会得到一个错误。我通过在上面的代码中创建 if-else 语句来解决这个问题。

但是因为这是方法的开始部分,当用户只输入一个值时我得到一个错误。我不确定如何解决这个问题,因为如果我移动第一个 if 语句,那么当用户未输入任何值时我会收到错误消息。我很困惑如何让它在两种不同的情况下都能很好地发挥作用。

基本上,当用户输入一个值时,上述方法将不起作用。

试试这个;更简单:

public static int readIntoArray(Scanner input, int[] nums) {
    
    int count = 0; // Will hold the number of values in array

    while(input.hasNextInt() && count < 100) {
        nums[count] = input.NextInt();
        count++;
    }

    return count;
}

假设您在输入中只有一个值。您的代码中断是因为在您递增 count 之后,您将 num 设置为下一个 int(不存在):

num = input.nextInt(); // there isn't a next int!

此外,我认为 do while 中的 if 循环逻辑不对。假设您有一个输入 3,我们已经解决了单输入错误。就在第二个 if 语句之前:

  • i 是 1.

  • count 是 1.

  • nums[0] 是 3.

    接下来,if (input.hasNextInt() == false) 将计算为真,因为 3 是我们唯一的输入。那么:

  • i还是1.

  • count 现在是 2.

  • nums[1] 是 3.

我几乎可以肯定这不是你想要的。