Java 欧拉4号项目-韩元';打印结果

Java 欧拉4号项目-韩元';打印结果,java,Java,问题是 回文数的两种读法相同。最大的回文数 由两个2位数字的乘积构成,9009=91×99。查找 由两个3位数字的乘积构成的最大回文。” 我不知道为什么我的代码不起作用。我推断,如果我从最大的数字开始,每次减少X,那么我找到的第一个回文数字就是它。但出于某种原因,它不是印刷品。非常感谢您的帮助 import java.lang.StringBuilder; public class Euler4 { public static void main(String[] args){

问题是

回文数的两种读法相同。最大的回文数 由两个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;
  }
  }
}

您的循环只循环一次,因为您有
break。添加大括号以防止将来发生此类情况:

if (num2.equals(num1.reverse().toString())) {
      System.out.println(num);
      break;
}
还要注意,如果(someBoolean==true)
if是多余的,只需写
if(someBoolean)
就可以防止错误赋值(
=
而不是
=
)。请。。缩进你的代码


老实说,当我查看您的代码时,我没有注意到这一点,但我使用了调试器,在不到5秒钟的时间内发现了问题。有一个调试器。。用它

您的循环只循环一次,因为您有
中断。添加大括号以防止将来发生此类情况:

if (num2.equals(num1.reverse().toString())) {
      System.out.println(num);
      break;
}
还要注意,如果(someBoolean==true)
if是多余的,只需写
if(someBoolean)
就可以防止错误赋值(
=
而不是
=
)。请。。缩进你的代码


老实说,当我查看您的代码时,我没有注意到这一点,但我使用了调试器,在不到5秒钟的时间内发现了问题。有一个调试器。。用它

在您的
if
语句周围加上大括号:

if (num2.equals(num1.reverse())==true) {
  System.out.println(num);
  break;
}

不使用大括号将只执行作为块一部分的条件后的第一条语句。

如果
语句:

if (num2.equals(num1.reverse())==true) {
  System.out.println(num);
  break;
}

不使用大括号将只执行作为块一部分的条件后的第一条语句。

您的代码缩进不良,这就是您没有发现错误的原因。每次迭代后都会中断

if (num2.equals(num1.reverse())==true) {
    System.out.println(num);
    break;
}

不在if语句周围使用大括号是可以的,但我建议在学习时尝试在所有语句周围使用大括号。

您的代码缩进不良,这就是您没有发现错误的原因。每次迭代后都会中断

if (num2.equals(num1.reverse())==true) {
    System.out.println(num);
    break;
}

不要在if语句周围使用大括号是可以的,但我建议在学习时尝试在所有语句周围使用大括号。

您可以去掉
StringBuilder
num2
并检查ik,如下所示:

if (num.equals(num.reverse())) {
    //...
}

这样你可以找到一个回文,但是没有信心它是由两个3位数字的乘积生成的。它可以是两个素数的乘积,一个2位数,另一个4位数。你必须检查所有3位数字的乘积,看看它是否有回文。

你可以去掉
StringBuilder
num2
,然后像这样检查ik:

if (num.equals(num.reverse())) {
    //...
}

这样你可以找到一个回文,但是没有信心它是由两个3位数字的乘积生成的。它可以是两个素数的乘积,一个2位数,另一个4位数。您必须检查所有3位数字的乘积,看看它是否构成回文。

此外,比较是在
String
StringBuilder
之间进行的,后者将始终给出
false
。此外,比较是在
String
StringBuilder
之间进行的,后者将始终给出
false
。除了将断点移动到if块中之外,请记住,除了将断点移动到if块中之外,您还需要一个最大的数字,即2个三位数的乘积(您目前只找到小于999*999的最大数字),请记住,您需要的最大数字是2个三位数的乘积(您目前只找到小于999*999的最大数字)