gpt4 book ai didi

java - 嵌套 for 循环给出意想不到的结果

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:43 25 4
gpt4 key购买 nike

我正在尝试解决在 http://chortle.ccsu.edu/CPuzzles/PartA/CpuzzlesAsection11.html 中找到的 A14 谜题。 ,使用 Java(与 Eclipse),当我遇到一些意想不到的结果时。

该谜题要求在每一行 k 上打印 100 * k 到 100 * k + 99 范围内所有 23 的倍数的整数(其中 k 是某个限制,例如 11)。

我最终用来解决问题的嵌套For循环是:

for(i = 0; i <= k; i++){
for(j = 0; j <= 99; j++){
if((100 * i + j) % 23 == 0)
System.out.print(100 * i + j + " ");
}

System.out.println();
}

但是,在我的第一次尝试中,在 If 语句中使用模除法之前,我没有在 100 * i + j 周围加上括号,它只产生一行结果:“0 23 46 69 92”(与正确的解决方案相比,它给了我 11 行结果:第一行中的“0 23 46 69 92”,第二行中的“115 138 161 184”等) .).

我试图找出这背后的原因。即使没有括号,我也会假设 If 语句在 j 上使用模除法,然后将其与 100 * i 组合。然而,如果是这样的话,它不是会产生 11 行(如果 k = 11)“0 23 46 69 92”,而不是仅仅一行吗?

最佳答案

这是由于运算符优先级造成的。模 (%) 运算符的优先级高于加号和减号运算符。请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html .

i = 1j = 38 的情况为例。在这种情况下,

(100 * i + j) % 23 计算结果为零,因此条件为真。另一方面,100 * i + j % 23 的计算结果为 115 并且条件为 false。

去掉括号后只打印一行的原因是,当i > 0(从第二行开始)时,表达式100 * i + j % 23将始终大于100,因此等于0的条件始终为假。因此,从外部 for 循环的第二次迭代开始,不会打印任何内容。

关于java - 嵌套 for 循环给出意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28124079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com