我试图制作一个程序,找到最大的回文,它是两个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。
答案 0 :(得分:1)
我立刻注意到的一件事是,在内循环的第一次迭代之后,num2是1000,因此内循环在外循环的剩余999次迭代中什么都不做。您必须将num2重置为0.
还考虑使用&#34; for&#34;而是循环;它们旨在防止出现这种错误:
for (int num1=0; num1<1000; num1++) {
...
}
另一个问题是回文检查是错误的。你无法将字符串与==进行比较(它测试对象标识,而不是字符串相等 - 你必须使用equals()代替)。但即使这是错误的,因为prodCheck2是&#34; tempProd1tempProd2 ...&#34;并且不包含实际数字。检查回文的最简单方法是:
if (tempProd1 == tempProd6 && tempProd2 == tempProd5 && tempProd3 == tempProd$) {
...
}
答案 1 :(得分:0)
if (prodCheck1 == prodCheck2){
System.out.println(prodCheck1);
}
是仅基于prodCheck1和prodCheck2的身份相等的比较。将该代码重写为:
if (prodCheck1.equals()){
System.out.println(prodCheck1);
}
使用值相等,对于相同的字符串将返回true。
答案 2 :(得分:0)
这里有几个问题。不应使用第一个==
来比较字符串。 You should use 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
在所有循环之外声明,仅在内循环内需要。尽可能在最小范围内声明变量。这将捕获我们在这里找到的错误。如果您在第一个循环中对其进行了延迟,那么批评num2
无法意外地进行非重置