【问题标题】:Loop not terminating after entering negative number输入负数后循环未终止
【发布时间】:2017-04-11 19:11:37
【问题描述】:

我正在编写一个程序,它应该读取一个正整数列表(包括 0)。如果用户输入超过 100 个数字或输入负数,则循环应该终止。

我尝试做一个简单的 do-while 循环来解决这个要求,但在运行时,无论我提供什么数字,循环都不会终止。我已经尝试过几次更改循环,但到目前为止都没有成功。我一定犯了一个非常微妙的菜鸟错误,但我似乎无法抓住它。

    int[] list = new int[100];
    int size=0;
    do{
        list[size] = kbd.nextInt();
        size++;
    }while((size < 100) && (list[size] >= 0));


}

【问题讨论】:

  • 当然不是。你刚刚增加了size,所以list 中下一个元素的值是0

标签: java loops do-while


【解决方案1】:

您的问题是您在测试 list[size] &gt;= 0 之前增加了 size。您应该将其更改为

do{
    list[size] = kbd.nextInt();
    size++;
}while((size < 100) && (list[size-1] >= 0));

【讨论】:

  • @s24569 如果您对答案感到满意,请考虑在等待 15 分钟后通过单击答案分数下方的绿色小复选标记来接受它。
【解决方案2】:

你为什么不使用 for 循环来做你想做的事?在我看来,在处理数组时,for 循环更容易使用。以下是如何使用这种 for 循环解决问题的示例:

int[] list = new int[100];
int tmp;

//This loop will run 100 times because your list.length() is 100
for(int i = 0; i < list.length(); i++) {
    tmp = kbd.nextInt(); //Saving user input temporary

    if(tmp < 0) //Exit loop when input is negative
        break;
    else   //Add input to list
        list[i] = tmp;
}

【讨论】:

  • 我最近才开始编程,但是老师说得很清楚,如果我们在 if 条件中使用 break 语句,他会立即取消分数。如果他没有把成绩差的威胁悬在我们头上,我会做你做的事
  • 好的。但我真的不明白为什么你的导师会这样做。这是没有意义的。我的意思是限制软件开发人员只使用一种解决方案是愚蠢的。特别是如果你限制他使用不是最好的解决方案之一......
猜你喜欢
  • 1970-01-01
  • 2021-09-28
  • 2020-02-26
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多