2015-10-06 83 views
-3

我寫了這個功能,將prefectly工作,但我有一個例外:的Java「字符串索引超出範圍」

的StringIndexOutOfBoundsException:字符串索引超出範圍:「字符串索引超出範圍:(長度字符串)」

這是代碼:

private static String inverse(String a) { 
    char[] invers = null; 
    String f; 
    for (int i = 0; i < a.length(); i++) { 
     invers[i] = a.charAt(a.length() - (i - 1)); 
    } 
    f = new String(invers); 
    return (f); 
} 

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    String chaine = sc.nextLine(); 
    String ch = inverse(chaine); 
    System.out.println("l'inv de" + args[0] + "est" + ch); 
    if (!args[0].equals(ch)) 
     System.out.println(args[0] + "n'est pas palind"); 
    else 
     System.out.println(args[0] + "est palind"); 
} 
+1

步驟通過與調試器的代碼,並看看事物的狀態('則爲a.length()','i', 'i-1'等)。 –

+1

如果你在最後一個人在這裏回答後遇到新問題,請不要發展你的問題。你必須爲此提出一個新問題。 – Tom

回答

2

替換此

invers[i]=a.charAt(a.length()-(i-1))

invers[i]=a.charAt(a.length()-i-1) 

對於i = 0你想在a.length() + 1訪問索引,這就是爲什麼你得到的異常。您還需要初始化invers。使用char[] invers= new char[a.length()]代替char[] invers = null

下面是完整的代碼:

private static String inverse(String a) { 
    char[] invers = new char[a.length()]; 
    for (int i = 0; i < a.length(); i++) { 
     invers[i] = a.charAt(a.length() - i - 1); 
    } 
    String f = new String(invers); 
    return f; 
} 
+0

什麼:在線程/異常 「主」 顯示java.lang.NullPointerException \t在ex3.Ex3.inverse(Ex3.java:21) \t在ex3.Ex3.main(Ex3.java:31) –

+0

您需要初始化'invers'數組。檢查編輯 – pgiitu

+0

我仍然有「字符串索引超出範圍」 –

0

你能做到這一點...?

//convert original string to a array 
char[] arr = a.toCharArray(); 
cha[] invers = new char[arr.length]; 

//reverse it 
for(int i = (arr.length - 1); i <= 0; i--) 
{ 
    inverse[arr.length - i] = a[i]; 
} 
+0

那麼,他或她會不高興,因爲它不會編譯('cha'),因爲循環體不會被輸入(檢查終止條件)。 – Tom

+0

告訴我需要數組,但在這一行找到字符串:invers [arr.length - i] = a [i]; –

0

2問題在逆()方法:

private static String inverse(String a) { 
    // array must get a size to get initialized 
    // char[] invers = null; 
    char[] invers = new char[a.length()]; 
    String f; 
    for (int i = 0; i < a.length(); i++) { 
     // INCORRECT : 
     // invers[i] = a.charAt(a.length() - (i - 1)); 
     // CORRECT : 
     invers[i] = a.charAt(a.length() - i - 1); 
    } 
    f = new String(invers); 
    return (f); 
} 
+0

我得到了另一個異常:java.lang.ArrayIndexOutOfBoundsException:0 –

+0

謝謝你解決了我得改變args [0]主:D –

相關問題