java - 运行测试不同循环结构的程序后没有输出

标签 java loops

这是一个旨在生成一系列从 1 到 1000 的连续整数,总和为 1000 的程序。我的函数 While1000 可以工作,但如果我尝试修改此代码以使用其他循环结构来获得相同的输出这是行不通的。我修改后的代码在使用 do-while 和 for 循环时发生 block 。当我在 Eclipse 中运行它们时,我没有得到任何响应。没有语法错误或异常警告。

以下是代码的不同版本:

public class While1000 {

    public static void main(String args[]) {
        int i, j, k, sum = 0;
        for (i = 1; i <= 1000; i++) {
            j = i;
            sum = i;
            while (sum < 1000)
                sum += ++j;

            if (sum == 1000) {
                for (k = i; k <= j; k++)
                    System.out.print(k + " ");
                System.out.println();
            }
        }
    }

}
public class dowhile1000 {
    public static void main(String args[]) {
        int i, j, k, sum = 0;
        for (i = 1; i <= 1000; i++) {
            do {
                j = i;
                sum += ++j;
            }
            while (sum >= 1000);
            if (sum == 1000) {
                for (k = i; k <= j; k++)
                    System.out.print(k + " ");
                System.out.println();
            }

        }
    }
}
public class For1000 {
    public static void main(String args[]) {
        int i, j, k, sum = 0;
        for (i = 1; i <= 1000; i++) {
            for (j = i; sum >= 1000; ++j) {
                sum += j;
            }

            if (sum != 1000) continue;
            for (k = i; k <= j; k++)
                System.out.print(k + " ");
            System.out.println();
        }
    }
}

正确的输出应该是:

28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 

55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 

198 199 200 201 202

1000

最佳答案

你的括号和缩进有点草率。这不会提高代码的可读性。

dowhile1000:如果在进入循环之前 while 条件可能为 false,则 do-while-loop 和 while 循环将有所不同。事实并非如此。因此 do-while-条件必须与 while 条件相同。第一次运行循环后,您的 do-while 条件不成立,因此循环终止。当然,j 和 sum 必须在 while 循环之前初始化。 j 在代码中运行的每个循环都会重置。

For1000:只要语句 2 中的条件为真,就会重复 for 循环。在 for-j-循环中,进入循环时条件永远不会为真,因此循环永远不会执行。 sum 必须在每个新 j 之前重置。因为 j 在 for 条件为真后递增,所以在 for-k 循环中测试必须是 k

public class While1000 {

    public static void main(String args[]) {

    int i, j, k, sum = 0;
    for (i = 1; i <= 1000; i++) {

        j = i;
        sum = i;

        while (sum < 1000)
        sum += ++j;

        if (sum == 1000) {
        for (k = i; k <= j; k++)
            System.out.print(k + " ");
        System.out.println();
        }
    }
    }
}

public class Dowhile1000 {

    public static void main(String args[]) {

    int i, j, k, sum = 0;
    for (i = 999; i <= 1000; i++) {

        j = i;
        sum = 0;

        do {
        sum += j++;
        } while (sum < 1000);

        if (sum == 1000) {
        for (k = i; k < j; k++)
            System.out.print(k + " ");
        System.out.println();
        }

    }
    }
}

public class For1000 {

    public static void main(String args[]) {

    int i, j, k, sum = 0;
    for (i = 1; i <= 1000; i++) {
        sum = 0;
        for (j = i; sum < 1000; ++j) {
        sum += j;
        }

        if (sum != 1000)
        continue;
        for (k = i; k < j; k++)
        System.out.print(k + " ");
        System.out.println();
    }
    }
}

关于java - 运行测试不同循环结构的程序后没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57029831/

相关文章:

java - 如何通过属性配置 spring-data-mongodb 以使用副本集

java.lang.IllegalStateException : Scanner closed

php - 在 PHP 和 MySQL 中创建带循环的嵌套数组

Java-在游戏中保存分数

Matlab:按一定标准从矩阵中选择子矩阵

java - 基于java.util.linkedlist创建我自己的有限链表

java - 连接 MySQL 数据库中的对象

java - 如何防止将类似字符写入字符串?

java - Docker ARG不会被替换为Docker文件

php - Apache在字符串串联循环中崩溃