Java(Eclipse)可以';我似乎无法处理我的大型迭代!用于EULER'的扰流板;第七

Java(Eclipse)可以';我似乎无法处理我的大型迭代!用于EULER'的扰流板;第七,java,eclipse,Java,Eclipse,这是我关于Euler第七个问题的代码 public static void main(String[] args) { int desiredMax = 1000000; int maxNumberOfTerms = 0; int maxTerm = 0; for(int startingNumber = 1; startingNumber<=desiredMax;startingNumber++) { int numberOfTer

这是我关于Euler第七个问题的代码

    public static void main(String[] args) {
    int desiredMax = 1000000;
    int maxNumberOfTerms = 0;
    int maxTerm = 0;
    for(int startingNumber = 1; startingNumber<=desiredMax;startingNumber++) {
        int numberOfTerms = 1;
        int currentNumber = startingNumber;
        while(currentNumber!= 1) {
            if(currentNumber%2 == 0) {
                currentNumber = currentNumber/2;
                numberOfTerms++;
            } else {
                currentNumber = (3 * currentNumber) + 1;
                numberOfTerms++;
            }
        }
        if(numberOfTerms > maxNumberOfTerms) {
            maxNumberOfTerms = numberOfTerms;
            maxTerm = startingNumber;
        }

    }
    System.out.print(maxNumberOfTerms + " " + maxTerm);
}

不要尝试使用递归函数方法来解决这个问题,使用蛮力算法最终将无法计算大输入。

您的
currentNumber
变量溢出
int
数据类型,变成负数,并导致代码进入无限循环

要解决此问题,请像这样声明变量(在原始循环代码中):

现在,
int desiredMax=1000000
(一百万)的计算可以很快完成

currentNumber
是数据类型
int
时,以下是导致无限循环的值的级数(从上到下读取,然后从左到右):


请注意,索引236处的最后一个值与索引218处的值相同。

您能提供更多信息吗?停止是什么意思?它是抛出错误还是代码只是停止处理?如果它只是停止,它总是在同一个数字吗?你能告诉我们你得到的确切的
Exception
吗?老实说,在我看来这是个大问题。也许它并没有停止,只是计算起来太长了。尝试添加打印语句。你有例外吗?它也可能已经用完了内存。据我所知,已更新。如果内存不足,我该如何修复它?这意味着您需要更好的解决方案!这些问题是专门为阻止暴力O(n^2)解决方案而设计的。尝试过递归,仍然没有问题:(我想gknicker已经给了你答案,你正在用你的当前数字溢出int类型:)
    package Euler;
public class Euler14 {
    static int desiredMax = 1000000;
    static int maxTerm = 0;
    static int maxNumberOfTerms = 0;
    static int currentNumber = 0;
    static int numberOfTerms = 0;
    public static void doMath(int startingNumber) {
        if(startingNumber == 1) {
            System.out.print( maxTerm + " " + maxNumberOfTerms);
        }
        else {
            currentNumber = desiredMax;
            while(currentNumber!= 1) {
                if(currentNumber%2 == 0) {
                    currentNumber = currentNumber/2;
                    numberOfTerms++;
                } else {
                    currentNumber = (3 * currentNumber) + 1;
                    numberOfTerms++;
                }
            }
            numberOfTerms++;
            if(numberOfTerms > maxNumberOfTerms) {
                maxNumberOfTerms = numberOfTerms;
                maxTerm = startingNumber;
            }
            desiredMax--;
            doMath(desiredMax);

        }
    }
    public static void main(String[] args) {

        doMath(desiredMax);
    }

}
long currentNumber = startingNumber;
 113383  1379177   2795998  204058582 -1812855948 -102088288  -4435 -248
 340150  4137532   1397999  102029291  -906427974  -51044144 -13304 -124
 170075  2068766   4193998  306087874  -453213987  -25522072  -6652  -62
 510226  1034383   2096999  153043937 -1359641960  -12761036  -3326  -31
 255113  3103150   6290998  459131812  -679820980   -6380518  -1663  -92
 765340  1551575   3145499  229565906  -339910490   -3190259  -4988  -46
 382670  4654726   9436498  114782953  -169955245   -9570776  -2494  -23
 191335  2327363   4718249  344348860  -509865734   -4785388  -1247  -68
 574006  6982090  14154748  172174430  -254932867   -2392694  -3740  -34
 287003  3491045   7077374   86087215  -764798600   -1196347  -1870  -17
 861010 10473136   3538687  258261646  -382399300   -3589040   -935  -50
 430505  5236568  10616062  129130823  -191199650   -1794520  -2804  -25
1291516  2618284   5308031  387392470   -95599825    -897260  -1402  -74
 645758  1309142  15924094  193696235  -286799474    -448630   -701  -37
 322879   654571   7962047  581088706  -143399737    -224315  -2102 -110
 968638  1963714  23886142  290544353  -430199210    -672944  -1051  -55
 484319   981857  11943071  871633060  -215099605    -336472  -3152 -164
1452958  2945572  35829214  435816530  -645298814    -168236  -1576  -82
 726479  1472786  17914607  217908265  -322649407     -84118   -788  -41
2179438   736393  53743822  653724796  -967948220     -42059   -394 -122
1089719  2209180  26871911  326862398  -483974110    -126176   -197  -61
3269158  1104590  80615734  163431199  -241987055     -63088   -590 -182
1634579   552295  40307867  490293598  -725961164     -31544   -295  -91
4903738  1656886 120923602  245146799  -362980582     -15772   -884 -272
2451869   828443  60461801  735440398  -181490291      -7886   -442 -136
7355608  2485330 181385404  367720199  -544470872      -3943   -221  -68
3677804  1242665  90692702 1103160598  -272235436     -11828   -662
1838902  3727996  45346351  551580299  -136117718      -5914   -331
 919451  1863998 136039054 1654740898   -68058859      -2957   -992
2758354   931999  68019527  827370449  -204176576      -8870   -496