2016-06-08 53 views
0
package palindrome; 
import java.util.Scanner; 
public class Palindrome 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter the word = > "); 
     String word = input.nextLine(); 
     int flag = 0; 
     int x = word.length(); 
     int i = 0; 
     int j = x; 
     for(; i<=x/2 && j>=x/2; i++,j--) 
     { 
      if(word.charAt(i)!=word.charAt(j)) 
      { 
       flag = 1; 
       break; 
      } 
     } 
     if(flag==0) 
     { 
      System.out.printf("The word '%s' is a palindrome", word); 
     } 
     else 
      System.out.printf("The word '%s' is not a palindrome", word); 
    } 


} 

輸出尖叫錯誤代碼:

輸入單詞=>女士一種迴文(下面給出錯誤)

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5 
at java.lang.String.charAt(String.java:658) 
at palindrome.Palindrome.main(Palindrome.java:16) 
+0

輸出尖叫!嘈雜的字節序列? – Mena

+0

我很想把這個標記爲http://stackoverflow.com/questions/5554734/what-c​​auses-a-java-lang-arrayindexoutofboundsexception-and-how-do-i-prevent-it,但那不是特定的到'StringIndexOutOfBoundsException'... –

+0

如果你的字符串有'x'字符,那麼最後一個字符的索引是'x-1',而不是'x'。 –

回答

1

您必須將j的初始值設置爲length-1

import java.util.Scanner; 
public class Scratch 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter the word = > "); 
     String word = input.nextLine(); 
     int flag = 0; 
     int x = word.length()-1; 
     int i = 0; 
     int j = x; 
     for(; i<=x/2 && j>=x/2; i++,j--) 
     { 
      if(word.charAt(i)!=word.charAt(j)) 
      { 
       flag = 1; 
       break; 
      } 

     } 
     if(flag==0) 
     { 
      System.out.printf("The word '%s' is a palindrome", word); 
     } 
     else 
      System.out.printf("The word '%s' is not a palindrome", word); 
    } 


} 
+0

將'j'的值設置爲'x-1'會更好,而不是將'x'的值設置爲'word.length() - 1'。然後,再次將環路警衛改爲'i

+0

給定代碼,一個簡單的修復最小變化。我的意思是看代碼人,你會用這麼多變量來完成這樣一個小任務嗎? –

2
int j = x; 

應該是:

int j = x-1; 
-2

我想這是因爲5分爲2的結果。 儘量保持中間長度爲整數。

0

索引從數組中的0開始。

package palindrome; 
import java.util.Scanner; 
public class Palindrome 
{ 
public static void main(String[] args) 
{ 
    Scanner input = new Scanner(System.in); 
    System.out.print("Enter the word = > "); 
    String word = input.nextLine(); 
    int flag = 0; 
    int x = word.length(); 
    int i = 0; 
    int j = x-1; 
    for(; i<=x/2 && j>=x/2; i++,j--) 
    { 
     System.out.println(i+" " +j); 
     if(word.charAt(i)!=word.charAt(j)) 
     { 
      flag = 1; 
      break; 
     } 
    } 
    if(flag==0) 
    { 
     System.out.printf("The word '%s' is a palindrome", word); 
    } 
    else 
     System.out.printf("The word '%s' is not a palindrome", word); 
} 

}

0

你只是忘記1,以減少字的長度: 記得字符串和數組的索引在Java中從0開始,這樣的長度應始終爲負1,因爲它不會是到達。例如,如果你的話的長度是4,你可以得到高達3指數是0〜3使得4

int x = word.length()-1; 
    int i = 0; 
    int j = x; 
    for (; i <= x/2 && j >= x/2; i++, j--) { 
     if (word.charAt(i) != word.charAt(j)) { 
      flag = 1; 
      break; 
     } 
    } 
0

只是爲了澄清其他答案總長度:
字符串是字符數組,所以如果你想用 「女士」

[m][a][d][a][m] -> is 5 letters, so its length is 5 
[0][1][2][3][4] -> but the indexes start with 0, so the last one is 4 

因此,x=word.length()-1

0

我在你的代碼錯誤。

「j = x的值;」 //錯誤 由於String是一個字符數組,它以0開頭到string.length-1。

因此int j = x-1; //會做正確的

0

我的建議是,你應該有一個seprate方法來檢查迴文,這樣,你讓你的代碼乾淨,質量code.You可以使用下面的方法來檢查迴文:

public static void main(String[] args) 
{ 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter the word = > "); 
     String word = input.nextLine(); 

     if(isPalindrome(word)) 
     { 
      System.out.printf("The word '%s' is a palindrome", word); 
     } 
     else 
      System.out.printf("The word '%s' is not a palindrome", word); 
} 


private static boolean isPalindrome(String input) { 
     if(input == null || input.isEmpty()) { 
      return false; 
     } 
     for(int i=0,j=input.length() -1; i > j; i++,j--) { 
      if(input.charAt(i) != input.charAt(j)) { 
       return false; 
      } 
     } 
     return true; 
}