相同的代码在 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;
这些分别用 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;