项目Euler 4 - 不会打印结果

时间:2013-10-30 07:26:19

标签: java

这是问题

  

“回文数字两种方式相同。最大的回文数   由两个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;
  }
  }
}

4 个答案:

答案 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)

你可以摆脱StringBuildernum2并像这样检查ik:

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

通过这种方式你可以找到一个回文,但没有信心它将由两个3位数的产品组成。它可以是两个素数的乘积,一个是2位数,另一个是2位数。您必须检查所有3位数字的乘积,看它是否为回文。