我在这里做错了什么?
我想要显示1-100中可被6或7整除的整数。这已经完成并正常工作。下一步是不显示任何可被两个整除的... ...在我的循环中不起作用(那些整数仍在显示)
for (int i = 1; i < 100; i++)
if (i % 6 == 0 || i % 7 == 0 && i % (6 * 7) != 0){
println(i);
}
谢谢! 乔尔
答案 0 :(得分:5)
尝试通过添加(...)使您的情况更明确,如下所示:
if (((i % 6 == 0 || i % 7 == 0) && (i % (6 * 7) != 0)) {
}
默认情况下&amp;&amp;优先于||
答案 1 :(得分:3)
缺少括号:
for (int i = 1; i < 100; i++) {
if ((i % 6 == 0 || i % 7 == 0) && i % (6 * 7) != 0) {
println(i);
}
}
答案 2 :(得分:2)
我只是不再担心如何评估优先级,并使用类似的东西:
for (int i = 1; i <= 100; i++) {
if ((i % 42) == 0) continue;
if ((i % 6) == 0) println (i);
if ((i % 7) == 0) println (i);
}
我假设1-100是一个包容性范围,在这种情况下你应该使用<=
而不是<
。这对你的具体情况无关紧要,因为100不能被6和7整除。
我认为这比以下内容更具可读性
if (i % 6 == 0 || i % 7 == 0 && i % (6 * 7) != 0) ...
或者更糟糕的是,你必须把它变成类似Lisp才能让它正常工作: - )
请记住一种可能性 - 您可以更改循环以使其更有效(七倍),对于具有6和7的特定情况,因此:
for (int i = 7; i <= 100; i += 7)
if ((i % 6) != 0)
println (i);
这使用for
循环本身仅检查7的倍数并打印它们,如果它们不是也是6的倍数。
答案 3 :(得分:2)
您也可以使用独家或
for (int i = 1; i < 100; i++) {
if ((i % 6 == 0) ^ (i % 7 == 0)) {
println(i);
}
}
或只是不平等if ((i % 6 == 0) != (i % 7 == 0))
由于独占或经常不使用,我怀疑这会增加代码的可读性......
答案 4 :(得分:1)
for (int i = 1; i < 100; i++)
if ((i % 6 == 0 || i % 7 == 0) && !(i % 6 == 0 && i % 7 == 0)){
println(i);
}