尝试解决项目euler分配时出错

时间:2017-06-09 21:10:37

标签: java if-statement error-handling while-loop project

我正致力于解决第14个项目的欧拉分配。

这是作业:

为正整数集定义以下迭代序列: n→n / 2(n是偶数) n→3n + 1(n为奇数) 使用上面的规则并从13开始,我们生成以下序列: 13→40→20→10→5→16→8→4→2→1 可以看出,该序列(从13开始并在1结束)包含10个项。虽然尚未证实(Collat​​z问题),但据认为所有起始数字都是1。 哪个起始编号低于一百万,产生最长的链? 注意:链条启动后,条款允许超过一百万

这是我的代码:

package collatzSequence;

public class CollatzSeq {

    public static void main(String[] args) {
        int count = 0;
        int largestCount = 0;

        for (int i = 13; i < 1000000; i++) {
            // System.out.println(i);
            int Number = i;

            while (Number > 1) {
                count = 0;

                if (Number % 2 == 0) {
                    Number = i / 2;
                    System.out.println("Even: " + Number);
                } else {
                    Number = (Number * 3) + 1;
                    System.out.println("Uneven: " + Number);
                }
                count+=1;

                if (count > largestCount) {
                    largestCount = count;
                    System.out.println("New largest found");
                }

            }

        }

    }

}

现在,这是我的问题。每次我运行程序时,都会打印出#34;偶数:6&#34;一遍又一遍地。如果它是偶数,它应该将它除以一半。

有没有人认出我的代码存在任何问题?

2 个答案:

答案 0 :(得分:1)

你的问题在这里:

Number = i / 2;

应该是:

Number = Number / 2;

您希望将当前数字减半,而不是将数字设置为等于起始数字除以2。

答案 1 :(得分:1)

这是因为if循环中的以下while条件:

if (Number % 2 == 0) {
     Number = i / 2;
     System.out.println("Even: " + Number);
}

此处,number为assigne i/2值,结果为6,然后,它永远不会更改,从而导致无限循环。

Number = i / 2;更改为Number = Number / 2;应该这样做。