我正在学习java,我想在特定问题上使用java程序

时间:2016-08-25 10:13:16

标签: java

我想为一个数字创建一个java程序,当除以2,3,4,5,6时,剩下的1除外,它完全除以7。 我试过这个逻辑

for (int a=1;a<=500;a++){
 if (a%2==1 && a%3==1 && a%4==1 && a%5==1 && a%6==1 && a%7==0)

它工作正常,但我希望通过这个逻辑

for (int a=1;a<=500;a++){
for(int b=2;b<=6; b++){


 if (a%b==1 && a%7==0){
System.out.println(a);
如果有可能以这种方式创建,请帮助我吗?谢谢

4 个答案:

答案 0 :(得分:1)

您可以计算多少次迭代通过测试,如下所示:

for (int a=1;  a<=500;  a++) {
    int flag=0;
    for (int b=2;  b<=6;  b++) {
        if (a%b == 1) {
            flag += 1;
        } else {
            break;
        }
    }
    if (flag == 5) {
        if (a%7 == 0) {
            System.out.println("Value "+a);
        }
    }
}

如果任何测试失败,flag将在循环结束时小于5。如果您更改了测试次数,则需要记住更新该幻数。

答案 1 :(得分:0)

你可以命名外部循环并检查并在内部循环中继续它,如下所示:

public static void main(String[]args){
    // That´s your mainloop
    mainLoop: for (int a=1; a<=500; a++){
        for(int b=2; b<7;++b) {
            // If anything doesn´t leave a remainder of 1 youll continue with the mainloop here
            if(a%b != 1) {
                continue mainLoop;
            }
        }
        // 2-6 had a remainder of 1, so just check if the number is dividible by 7 now, if so print it.
        if(a%7 ==0) {
            System.out.println(a);
        }
    }
}

答案 2 :(得分:0)

如果将代码拆分为函数,它可以使事情变得更容易。从外部(a)循环开始:

public static void main(String[] args)
{
    for (int a = 1;  a <= 5000;  ++a)
        if (test(a))
            System.out.println(a);
}

我们已将实际逻辑推迟到test()函数,并假设我们稍后会定义。

现在编写测试。只要任何子测试失败,我们就可以立即返回false。如果所有测试都通过并且我们到达终点,那么我们必须返回true:

static boolean test(int x)
{
    // i is the candidate factor
    for (int i = 2;  i <= 7;  ++i) {
        int expected = i==7 ? 0 : 1;
        if (x%i != expected)
            return false;
    }
    return true;
}

我们可以通过使用幻数来进一步简化以编码expected

的不同值
static boolean test(int x)
{
    for (int i = 2;  i <= 7;  ++i)
        if (x%i != 301%i)
            return false;
    return true;
}

答案 3 :(得分:-1)

您可以迭代所有b值,并在其中任何一个测试失败时设置标志。如果在循环结束时未设置该标志,则表示它们都已通过:

for (int a=1; a<=500; a++) {
    int flag = 0;
    for (int b=2; b<=6; b++) {
        if (a%b!=1 || a%7!=0) {
            // doesn't satisfy the condition, so flag it
            flag = 1;
            break; // exit the inner loop
        }
    }
    if (flag == 0)
        // If we got here without setting flag, it means that all of the
        // 'b' values passed the test.
        System.out.println(a);
}