【问题标题】:Java: Unable to understand for loop behaviourJava:无法理解 for 循环行为
【发布时间】:2020-04-19 04:05:47
【问题描述】:

我对编码有点陌生,我正在解决一个问题,该问题应该打印变量 L 和 R 之间的所有整数,包括 L,R。但我反复得到所需的输出。我不明白它的原因。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int L = sc.nextInt();
        int R = sc.nextInt();

        for (int i = 0; ; i++) {
            if (i >= L && i <= R) {
                System.out.print(i + " ");
            }
        }
    }

输入:L=4 ,R=8

输出:4 5 6 7 8 4 5 6 7 8 4 5 6 7 8 等等...

【问题讨论】:

  • 请正确格式化您的代码。还有,你为什么把Main这个类粘贴了两次?
  • 对不起,我是新手,现在正在编辑代码

标签: java loops for-loop iteration


【解决方案1】:

你把条件放错了地方,所以你的循环是无限的。

进一步说明,由于您的循环没有退出条件,i 将永远递增,但在达到Integer.MAX_VALUE 后,下一个i++ 将溢出,因此i 将变为负数(Integer.MIN_VALUE) .然后它将继续递增,直到再次达到您希望打印的范围,因此该范围将被一次又一次地打印,直到永远。

正确的循环应该是:

for(int i = L; i <= R; i++) {
    System.out.print(i+" ");
}

现在i 将从您要打印的第一个值 (L) 开始,并且在打印您要打印的最后一个值 (R) 后循环将终止。

【讨论】:

  • 但是当我把 i++ 放在那里时,为什么它会一次又一次地打印 4 5 6 7 8 呢? 8 不应该因为 i++ 而变成 9 吗?
  • @GeminiKrishna 你读过我在编辑中添加的段落吗?
【解决方案2】:

如果是编码新手,请按照link 了解 for 循环的工作原理

并且你没有定义任何条件何时 for 循环应该停止执行代码块

for(int i = L; i <= R; i++) {
    System.out.print(i+" ");
}

这就是你的 for 循环应该是这样的

【讨论】:

    猜你喜欢
    • 2013-10-15
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2018-08-14
    • 1970-01-01
    相关资源
    最近更新 更多