繁体   English   中英

Java程序终止而没有错误?

[英]Java program terminating without error?

我正在尝试创建一个程序,该程序查找由两个3位数组成的乘积最大的回文。 这就是我现在所拥有的(我是编程新手):

    int num1 = 0;
    int num2 = 0;
    int product = 0;
    int tempProd1 = 0;
    int tempProd2 = 0;
    int tempProd3 = 0;
    int tempProd4 = 0;
    int tempProd5 = 0;
    int tempProd6 = 0;
    String prodCheck1 = "";
    String prodCheck2 = "";

    while (num1 < 1000){
        while (num2 < 1000){
            product = num1 * num2;
            prodCheck1 = Integer.toString(product);

            tempProd1 = product % 10;
            product = product / 10;
            tempProd2 = product % 10;
            product = product / 10;
            tempProd3 = product % 10;
            product = product / 10;
            tempProd4 = product % 10;
            product = product / 10;
            tempProd5 = product % 10;
            product = product / 10;
            tempProd6 = product % 10;
            product = product / 10;             

            prodCheck2 = "tempProd1" + "tempProd2" + "tempProd3" + "tempProd4" + "tempProd5" + "tempProd6";

            if (prodCheck1 == prodCheck2){
                System.out.println(prodCheck1);
            }   
            num2++;
        }
        num1++;
    }   

问题是,每次我尝试运行它时,它都会终止而不会出现错误。 有人可以解释我在做什么错吗?

编辑:谢谢大家,终于解决了它。 如果有人在想,答案是853358。

编辑:实际上,这个数字是906609。

我立即注意到的一件事是,在内循环的第一次迭代之后,num2是1000,因此内循环在外循环的其余999次迭代中将什么也不做。 您必须将num2重置为0。

还可以考虑使用“ for”循环; 它们旨在防止这种错误:

for (int num1=0; num1<1000; num1++) {
  ...
}

另一个问题是回文检查不正确。 您不能将字符串与==进行比较(它测试对象的身份,而不是字符串的相等性-您必须使用equals()代替)。 但这甚至是错误的,因为prodCheck2是“ tempProd1tempProd2 ...”,并且不包含实际数字。 检查回文的最简单方法是:

if (tempProd1 == tempProd6 && tempProd2 == tempProd5 && tempProd3 == tempProd$) {
  ...
}
if (prodCheck1 == prodCheck2){
            System.out.println(prodCheck1);
}   

是仅基于prodCheck1和prodCheck2的身份相等性进行的比较。 将该代码重写为:

if (prodCheck1.equals()){
            System.out.println(prodCheck1);
} 

使用将对相同字符串返回true的值相等。

字符串的等于方法

这里有几个问题。 首先==不应用于比较字符串。 您应该使用string.equals(otherString);

含意词

其次,当您想要组合值时,您似乎正在组合单词

prodCheck2 = "tempProd1" + "tempProd2" + "tempProd3" + "tempProd4" + "tempProd5" + "tempProd6;

会给

prodCheck2 = "tempProd1tempProd2tempProd3tempProd4tempProd5tempProd6";

总是。 这些单词恰好与某些变量具有相同的名称,这一事实与java毫无区别。

有许多更好的方法来连接整数。 但最简单的方法可能如下

prodCheck2 = tempProd1 + "" + tempProd2 + "" +tempProd3 + "" +tempProd4 + "" +tempProd5 + "" +tempProd6";

使用while时会更好

while (num1 < 1000){
              while (num2 < 1000){
              ......
              num2++;
        }
        num1++;
}

此代码从不减少num2,这意味着num2在num1 = 0时为1-> 1000,然后一直保持在1000。 我猜这不是您想要的。 我们可以修复while循环,但实际上这是for循环的目的

for(int num1=0;num1<1000;num1++){
     for(int num2=0;num2<1000;num2++){
         //code as before, no need to inciment or reset num1 or num2 inside the loop
     }
}

不会破坏您代码的问题

您在声明所有具有很大范围的变量。 例如tempProd1声明所有环路外depite仅被需要的内循环中。 在尽可能小的范围内声明变量。 这将捕获类似我们在此处发现的错误。 危重num2不可能意外地成为无法复位如果您想在第一循环中delared它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM