【问题标题】:No for loop will run inside for loop. Testing for primes没有 for 循环将在 for 循环内运行。质数测试
【发布时间】:2013-07-05 03:36:46
【问题描述】:

由于某种原因,我的第二个 for 循环根本不会运行。事实上,我放在那里的任何其他类型的 for 循环也不会运行。我测试只是在 println("looping until we 除以...); 之后放置一个简单的 for 循环;这也不会运行。我为测试添加的简单 for 循环是这样的。

for (int k = 0; k > 10; k++) {
   System.out.println(k);
}

这显然只会打印从 0 到 10 的值。但它不会执行。这是程序的实际代码。如果有人想知道它应该做什么,它需要一个范围,硬编码为从 100 到 1000 进行测试。它通过遍历从 2 到 1000 的所有数字来检查最后一个数字 1000 是否是素数/2查看余数是否为0,如果是,则该数不是质数,打破循环并检查下一个数。如果数字在没有将 isPrime 设置为 false 的情况下通过,那么它是一个素数,并且因为我们从最大的数字开始,它是列表中最大的素数,因此我们打破外循环并打印它。是的,这是使用 RMI 的家庭作业的一部分。我的 RMI 工作得很好,但是算法给我带来了麻烦,所以我决定从一个新程序开始,在我把它放入我的 PrimeImpl 类之前得到算法。这是代码。

public class PrimeTest {

    public static void main(String[] args) {

        int first = 100;
        int last = 1000;
        int biggest = 0;
        boolean isPrime = true;
        int i;

        for (i = last; i > first - 1; i--) {

            isPrime = true;
            System.out.println("Assume " + i + " is prime.");
            int halfI = i / 2;
            System.out.println("Looping until we divide by " + halfI);

            for (int j = 2; j > halfI; j++) {

                // Loop not entering. This statement doesnt print. Why?
                System.out.println(i + " modulus " + j + " = " + i % j);
                if (i % j == 0) {

                    isPrime = false;
                    System.out.println("Not a prime");
                    break;
                }
            }

            if (isPrime == true) {
                System.out.println(i + " is a prime");
                break;
            }
        }

        if (isPrime == true) {
            biggest = i;
        }

        if (isPrime == false) {
            biggest = 0;
        }

        System.out.println(biggest);
    }
}

我知道还有其他方法可以测试素数,但目前我想在这里尝试使用我的方法。如果它有效,它似乎会很有效,因为一旦我得到第一个素数,它就完成了。

【问题讨论】:

  • 您能否也添加领事输出。这样我们就知道到达了哪些打印语句。
  • 运行:假设 1000 是素数。循环直到我们除以 500 89u3489ty9ht8whtiwth 1000 是素数 1000 BUILD SUCCESSFUL(总时间:0 秒)
  • 对不起,那里的乱码文本,我把它放在那里只是为了看看它是否会执行,但后来我在发布之前从我的代码中删除了该代码......就在如果您想知道从 500 到 1000 开始的文本字符串在哪里。
  • 好问题。喜欢玩素数。聪明人的整个职业生涯都在这样做:)

标签: java math for-loop nested-loops


【解决方案1】:
for (int k = 0; k > 10; k++) {
   System.out.println(k);
}

k 不大于 10,因此循环将永远不会执行。我想想要的是k<10,不是吗?

for (int k = 0; k < 10; k++) {
   System.out.println(k);
}

【讨论】:

  • 也许我对 for 循环的工作方式感到困惑,但终止语句是否意味着它将一直运行到该语句为真?因此,例如,它应该一直循环直到 k > 10,并且 k 从 0 开始并执行 k++,最终 k 将变为 11,此时 k > 10 等于 true,循环结束。
  • 不,你是对的,我是个十足的白痴。我刚刚意识到我的代码中的错误。我的第二个 for 循环终止语句应该是 j halfI。即使我的第一个 for 循环,我的脑子里也有逻辑,无论出于什么原因,我的第二个 for 循环我都把它倒退了,正如我在上面的评论中解释的那样。我会尽快将此答案标记为正确答案。显然我得等 5 分钟。
  • @RichardChase:对不起,我出去了。我希望你现在清楚了。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 2015-03-21
相关资源
最近更新 更多