【问题标题】:Reading user input: No value entered v one value entered读取用户输入:没有输入值 v 输入了一个值
【发布时间】:2017-03-25 05:19:12
【问题描述】:

我的一种方法有问题:

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;
}

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

但由于这是该方法的开始部分,因此当用户仅输入一个值时会出现错误。我不确定如何解决这个问题,因为如果我移动第一个 if 语句,那么当用户不输入任何值时我会收到错误消息。我很困惑如何让它在两种不同的场景中发挥得很好。

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

【问题讨论】:

标签: java arrays eclipse computer-science


【解决方案1】:

试试这个;它更简单:

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) 将评估为 true,因为 3 是我们唯一的输入。那么:

  • i 仍然是 1。

  • count 现在是 2。

  • nums[1] 是 3。

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

【讨论】:

  • 哦,我明白我做了什么。这是我第一次使用 input.hasNextInt() 方法,所以我不完全确定如何实现它。好吧,现在比较代码是有意义的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
相关资源
最近更新 更多