相同的代码在 C 和 Java 中给出了不同的答案,你能帮我吗?

Same code gives different answer in C and Java, can you help me?

这些分别用 C 和 Java 编写的代码片段应该输出相同的结果,但实际上并没有,而且我无法确定错误在哪里。

用 C 编写

#include <stdio.h>
/* discover and print  all the multiples of 3 or 5
below 1000 */

int main() {

    int sum, counter = 1;

    while (counter < 1000) {
        printf("Calculating...\n");
        printf("%d numbers already verified.\n", counter); 
        if ( counter % 3 == 0 || counter % 5 == 0 ) {
            sum += counter;
        }
        ++counter;  
    }

    printf("The sum of all multiples is: %d", sum);
    return 0;
}

Java:

package problems;
//Prints the sum of all the multiples of 3 or five below 1000

public class Problem1 {
    public static void main(String[] args) {
        int sum = 0, counter = 1;

        while (counter < 1000) {
            System.out.format("Calculating...%n");
            System.out.format("%d numbers already verified.%n",counter);
            if( (counter % 3 == 0) || (counter % 5 == 0) ) {
                sum += counter;
            }
            ++counter;
        }
        System.out.format("The sum of all multiples is: %d", sum);
    }
}

C 输出总和为 2919928,而 Java 输出 233168。

您的代码中的问题是您没有初始化变量 sum

sum 的值在未初始化时未定义。因此 sum 将采用当前内存中的值,这会产生像这样的不准确性。

将变量 sum 初始化为 0,您应该会得到正确的结果。

在您编写的 C 代码中

int sum, counter = 1;

这意味着总和没有用值初始化。
与 Java 不同,C 中 int 的默认值不是零。查看问题 here 了解更多详情。

此值可能是垃圾值,您的代码将添加到该值而不是零,从而给出无效结果。

要修复您的代码,只需在声明变量时初始化 sum。

 int sum = 0;
 int counter = 1;