2012-01-28 68 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 - =我無法生成該代碼。