这两个 for 循环行为不同的原因是什么?

What is the reason for these two for loop acting differently?

嗨,谁能帮我解决这个问题?

第一段代码给出了预期的输出。 但是第二个用于无限循环。 这是什么原因?

谢谢。

1.

import java.util.Scanner;
class Numbers
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter a starting number: ")
        int start = scan.nextInt();

        for(int a = start;a<=(start+10);a++)
        {
             System.out.println(a);
        }

    }
}

2.

import java.util.Scanner;
class Numbers
{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter a starting number: ")
        
        for(int start = scan.nextInt();start<=(start+10);start++)
        {
             System.out.println(start);
        }

    }
}

这个 for(int start = scan.nextInt();start<=(start+10);start++) 将变化的变量与变化的值进行比较,保持相同的距离。
IE。 start的值永远低于start+10,一开始你得到的是一个死循环。它只能在值变得如此之高以至于无法再表示它们时才会终止,奇怪的事情发生了。例如,那时 start+10 可能看起来低于 0,因此看起来也低于 start,后者还没有超过那个奇怪的边界。

在第一个块中,start是一个固定值的常量变量,条件是在astart之间(a不断增加a++start 不会改变它的值)。

而在第二个块中,条件在startstart+10之间,但是start在循环函数中随着start++不断增加,这使得循环是无限(start 不断更改其值,因此 start<=(start+10) 始终为真)。

在你的第二段代码中

for(int start = scan.nextInt();start<=(start+10);start++)
{
    System.out.println(start);
}

您正在将 start 与自身加 10 进行比较。无论您要执行什么操作,都不能等于自身加 10。start 将始终小于本身加 10,因此产生无限循环。 这是一个语义错误。您应该使用不同的变量来跟踪循环,就像您在第一个代码段中所做的那样,并使用第二个变量来跟踪对抗(start你的情况)。