for (int i=n1; i < n2; i++){
if (i % 2 == 0){
System.out.println(i);
}
}
此代码打印出n1和n2之间的所有数字(它们是随机生成的),它们都可以被2和3整除,但我只想打印出可被2整除的数字。我该怎么做?
答案 0 :(得分:2)
你真的在那里。
你需要第二个条件,你要求数字不可被3整除。它看起来像这样:
!(i % 3 == 0)
现在,如果两个条件都为真,则需要一个布尔运算符才能返回true。那,我将作为练习留给读者。
答案 1 :(得分:0)
(其他人已经给出了正确答案,但我会尝试更自然地解释一下)
对于计算机,您需要以他们能够理解的方式编写句子。你需要转换逻辑句子,如&#34; divise by 2而不是3&#34;更基本的版本,仅使用&#34; not&#34;,&#34;和&#34;和&#34;或&#34;。在您的具体情况下,您想说the numbers that are divisible by 2 AND NOT divisible by 3
正如您已经注意到的那样,N%X!=0
是一种(丑陋的)写N is divisible by X
的方式。在Java中,我们使用!
来说not
和&&
来说and
。
这样,(N is divisible by 2) AND NOT (N is divisible by 3)
可以写成(N % 2 == 0) && !(N % 3 == 0)
。但是我们还有X not equal Y
运算符(X!=Y
),它相当于NOT (X equal Y)
但更容易理解,导致此代码:
if ((i % 2 == 0) && (i % 3 != 0)) {
System.out.println(i);
}
答案 2 :(得分:0)
更有效的解决方案是打印偶数(每秒)不是3的倍数(每三个数字)
for (int i = 2; i < n; i += 6) {
System.out.println(i);
if (i + 2 < n)
System.out.println(i + 2);
}
模数操作很昂贵,每次循环打印两个数字,而不是每六个循环打印两个数字。
答案 3 :(得分:0)
我使用位运算符来获得最佳性能(如果(i & 1) == 0
, i 偶数)。因为二进制中的偶数总是有0位数。
public class Example {
public static void main(String[] args) {
int n1 = 0;
int n2 = 100;
for (int i = n1; i < n2; i++) {
if (((i & 1) == 0)) {
if (i % 3 != 0) {
System.out.print(i + " ");
}
}
}
}
}
// Result:
// 2 4 8 10 14 16 20 22 26 28 32 34 38 40 44 46 50 52 56 58 62 64 68 70 74 76 80 82 86 88 92 94 98
有更好的方法,例如3534%3 == 0,我们有:所有数字的总和(3 + 5 + 3 + 4)= 15,和15%3 == 0 ...让&#39;代码如下。
当n很大时,例如n2 = 99999999999999,使用所有数字的总和是(9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9)%3 == 0,位运算符非常有意义:)
答案 4 :(得分:-1)
使用逻辑和比较运算符&&
for (int i=n1; i < n2; i++){
if (i % 2 == 0 && i % 3 != 0) {
System.out.println(i);
}
}
你的if
条件现在询问“我是否可以被2整除,并且不能被3整除”