这是问题
“回文数字两种方式相同。最大的回文数 由两个2位数字的乘积制成的9009 = 91×99。
查找 最大的回文由两个3位数字的乘积组成。“
我不确定为什么我的代码不起作用。我推断如果我从最大的数字开始并且每次减少X,那么我找到的第一个回文数是它。但由于某种原因,它不是打印。非常感谢任何帮助!
import java.lang.StringBuilder;
public class Euler4 {
public static void main(String[] args){
for (int x=999*999; x>=100*100; x--){
String num=Integer.toString(x);
StringBuilder num1 = new StringBuilder(num);
String num2 = num1.toString();
if (num2.equals(num1.reverse())==true)
System.out.println(num);
break;
}
}
}
答案 0 :(得分:4)
你的循环只循环一次,因为你有break;
。添加大括号以防止将来出现这种情况:
if (num2.equals(num1.reverse().toString())) {
System.out.println(num);
break;
}
另请注意,编写if(someBoolean == true)
是多余的,只需编写if(someBoolean)
以防止错误分配(=
而不是==
)。请...缩进你的代码!
老实说,当我查看你的代码时,我没有注意到,但我使用了一个调试器,并在不到5秒的时间内发现了问题。有一个调试器..使用它!
答案 1 :(得分:1)
您的代码缩进不足,这就是您没有发现错误的原因。你会在每次迭代后中断。
if (num2.equals(num1.reverse())==true) {
System.out.println(num);
break;
}
如果陈述没问题,不要使用大括号,但我建议你在学习的同时尽量把它们放在一切。
答案 2 :(得分:0)
在if
声明周围加上大括号:
if (num2.equals(num1.reverse())==true) {
System.out.println(num);
break;
}
不使用大括号只会在条件作为块的一部分后执行第一个语句。
答案 3 :(得分:0)
你可以摆脱StringBuilder
和num2
并像这样检查ik:
if (num.equals(num.reverse())) {
//...
}
通过这种方式你可以找到一个回文,但没有信心它将由两个3位数的产品组成。它可以是两个素数的乘积,一个是2位数,另一个是2位数。您必须检查所有3位数字的乘积,看它是否为回文。