2012-01-28 88 views
0

我试图解决以下问题的4号:无法找到我的代码错误项目欧拉

查找两个3位数字的乘积的最大回文。

我有以下的Java代码:

public static void main(String[] args) { 
     int a = 999, b = 999; 
     for(int i = 100; i <= a; i++) { 
      for(int j = 100; j <= b; j++) { 
       checkPalindrome(i*j, i, j); 
      } 
     } 
    } 

    public static void checkPalindrome(int n, int a, int b) { 
     String s = "" + n; 
     boolean palindrome = false; 
     int j = s.length()-1; 

     for(int i = 0; i < s.length(); i++){ 
      if(s.charAt(i) != s.charAt(j)) 
       break; 
      j -= i; 
     } 

     if(palindrome) 
      System.out.println(n + ", " + a + ", " + b); 
    } 

我仍然缺乏此刻的“回文”可变的,但变化如果我运行它,我得到的是线28 String index out of rangej -= i我只是不明白为什么会发生这种情况我的意思是,我得到的差异是导致一个低于0的数字,但我无法弄清楚为什么会发生这种情况。有人能解释我吗?

+0

没有多少考虑,不会不断地从'j'中减去越来越大的数字,最终使它成为'<0'?也许你想总是把'j'设置为'string - 1 - i'的长度? – 2012-01-28 02:05:49

回答

1

您的方法可以像这样改进。 for循环中的条件= j迭代次数也减少了。

public static void checkPalindrome(int n, int a, int b) { 
    String s = "" + n; 
    boolean palindrome = false; 
    int j = s.length()-1; 

    for(int i = 0; i <= j; i++){ 
     if(s.charAt(i) != s.charAt(j)) 
      break; 
     j --; 
    } 

    if(palindrome) 
     System.out.println(n + ", " + a + ", " + b); 
} 

希望这会有所帮助。

+0

这正是我要去的,谢谢! – Tsundoku 2012-01-28 16:49:27

1

更改您的代码:

public static void checkPalindrome(int n, int a, int b) { 
     String s = "" + n; 
     boolean palindrome = true; 
     int j = s.length()-1; 

     for(int i = 0; i < s.length(); i++){ 
      if(s.charAt(i) != s.charAt(j)) 
       palindrome = false; 
     } 

     if(palindrome) 
      System.out.println(n + ", " + a + ", " + b); 
    } 
1

我想你想j--j -= i。特别是因为i从0开始。

0

您正在增加i - 您想减少j - 您不想执行j - = i。

否则用于长度为5的一个字符串,你会得到:

I = 0,J = 4

I = 1,J = 4

设为i = 2,J = 3

I = 3,J = 1

I = 4,J = -2

虽然如果它给一个索引超出范围的消息,您正在运行不同版本的代码 - j - =我无法生成该代码。