我在这里做错了什么?简单布尔问题
我想显示可以被6或7整除的1-100的整数。这已经完成并且正在工作。下一步是不显示任何由两种整除...这是不是我的工作循环(这些整数仍显示)
for (int i = 1; i < 100; i++)
if (i % 6 == 0 || i % 7 == 0 && i % (6 * 7) != 0){
println(i);
}
谢谢! 乔尔
我在这里做错了什么?简单布尔问题
我想显示可以被6或7整除的1-100的整数。这已经完成并且正在工作。下一步是不显示任何由两种整除...这是不是我的工作循环(这些整数仍显示)
for (int i = 1; i < 100; i++)
if (i % 6 == 0 || i % 7 == 0 && i % (6 * 7) != 0){
println(i);
}
谢谢! 乔尔
缺少括号:
for (int i = 1; i < 100; i++) {
if ((i % 6 == 0 || i % 7 == 0) && i % (6 * 7) != 0) {
println(i);
}
}
谢谢,它做到了! – Joel 2010-03-03 07:45:41
for (int i = 1; i < 100; i++)
if ((i % 6 == 0 || i % 7 == 0) && !(i % 6 == 0 && i % 7 == 0)){
println(i);
}
这不会编译!这里右括号的错误位置应该是'(i%6 == 0 || i%7 == 0)' – 2010-03-03 08:34:49
oops,感谢那 – objects 2010-03-03 08:43:48
我只想不用担心如何评价优先级,并使用类似:
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整除。
猜猜是什么?任何体面的优化编译器(包括JIT的)都可能最终生成与所有其他可能性相同的代码。而且,即使它没有,除非你调用这个函数很好许多次,这并不重要。
我认为这是比更具可读性一点点:
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.
倍数您还可以使用专属或
for (int i = 1; i < 100; i++) {
if ((i % 6 == 0)^(i % 7 == 0)) {
println(i);
}
}
或者仅仅是一个不等if ((i % 6 == 0) != (i % 7 == 0))
由于独占或不经常使用,我怀疑这会增加代码的可读性...
Java运算符优先级:http://java.sun.com/docs/books/tutorial/java/nutsandbolts/OPERAT ors.html#nutsandbolts-precedence – 2010-03-03 07:43:24
很酷。谢谢!我错误地分开了我的脑海中的三个论点,并没有认为需要括号...... – Joel 2010-03-03 07:47:43
你是不一样的乔尔作为http://www.joelonsoftware。com /',right – 2010-03-03 07:53:56