[英]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 (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.