打印不是7和2的倍数的数字

时间:2018-07-31 14:18:58

标签: java

我对Java还是很陌生,但发现自己陷入了一个难题。我解决问题的逻辑是正确的,但是我的逻辑运算符没有按照我期望的方式工作。这是我编写的程序:

public class idgaf {
public static void main(String[] args) {
    int n=25;
    for(int i=1;i<=n;i++){
        if((i%7!=0)||(i%2!=0)){
            System.out.print(i+" ");

        }
    }
}

输出:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

我希望OR运算符可以执行此操作,并且不显示7和2的任何倍数,但是,删除的唯一数字是14,它是7和2的倍数。 我用AND运算符尝试了相同的代码,并给了我正确的输出。

使用AND运算符的输出:1 3 5 9 11 13 15 17 19 23 25

似乎AND运算符在工作,我期望OR运算符在工作,反之亦然。有人可以解释这是怎么回事吗?

4 个答案:

答案 0 :(得分:1)

检查您的状况。应该是:

    if((i%7 != 0) && (i%2 != 0)){ .....

i%7!=0 //不能除以7

i%2!=0 //不能除以2

与AND一起加入,您得到正确的结果

答案 1 :(得分:0)

正确的版本应该是

public class idgaf {
    public static void main(String[] args) {
        int n = 25;
        for (int i = 1; i <= n; i++) {
            // here are two adjustments, && instead of || and % 2 != 0 (not 10)
            if ((i % 7 != 0) && (i % 2 != 0)) {
                System.out.print(i + " ");
            }
        }
    }
}

答案 2 :(得分:0)

尝试一些新东西吗?

使用Java 8这样的事情,它将仅返回满足您要求的前k个整数:

public static void main(String... args) {
    System.out.println(getTopK(10));
}

private static List<Integer> getTopK(int k) {
    return IntStream.range(0, Integer.MAX_VALUE)
            .filter(i -> i % 7 != 0 && i % 2 != 0)
            .limit(k).boxed()
            .collect(Collectors.toList());
}

如果k = 10的输出将是:

[1, 3, 5, 9, 11, 13, 15, 17, 19, 23]

答案 3 :(得分:0)

在python程序中:

for n in range(0, 101, 7):
      print(n)

打印0到100之间的7的倍数。每行打印一个倍数,并避免打印不是7的倍数的任何数字。请记住0也是7的倍数。