2015-10-06 41 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 –

相关问题