2016-03-25 117 views
0

我的任務是翻轉一個字符串並打印反轉的字符串。字符串索引OutOfBoundsException?

這裏是我的代碼

import java.util.*; 
import java.io.*; 
public class reverse1 
{ 
    public static void reverse(String x) throws IllegalCharacterException 
    { 
    char j; 
    int max; 
    String reversedString = " "; 
    for(int i = 0; i < x.length() - 1; i++) 
    { 
     max = x.length(); 
     j = x.charAt(i); 
     j = reversedString.charAt(max); 
     i--; 
    }//end for loop 

    }//end method 

public static void main(String[] args) throws IllegalCharacterException 
{ 
    Scanner keyboard = new Scanner(System.in); 
    String s; 
    System.out.println("Please enter a string"); 
    s = keyboard.next(); 
    reverse(s); 
}//end main 

}//end class 

我不斷收到此錯誤:

java.lang.StringIndexOutOfBoundsException: String index out of range: 6 
at java.lang.String.charAt(Unknown Source) 
at reverse1.reverse(reverse1.java:14) 
at reverse1.main(reverse1.java:26) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 

我測試過提到的行號,但還是不明白這個問題。我確實將x.length()更改爲x.length() - 1,因爲朋友告訴我要這樣做,但我一直得到相同的錯誤。

+0

'reversedString.charAt(max);'...你期望這個返回什麼? –

+2

[在Java中反轉字符串]可能的重複(http://stackoverflow.com/questions/7569335/reverse-a-string-in-java) –

+0

@ cricket_007:爲什麼重複「在Java中反轉字符串」?問題不在於如何反轉字符串。這是一個特殊的例外。 – yaccob

回答

0

j = reversedString.charAt(max);是給你error.Since reversedString conatins的空字符串長度爲零。但您正在訪問max索引。

注意:您爲扭轉字符串寫入的邏輯並不correct.Below代碼可以幫助對

for(int i = x.length() - 1; i >=0 ; i--) 
{ 
    char c = x.charAt(i); 
    reversedString = reversedString+c; 
} 
+0

感謝的人,它的工作 – Marc

+0

@Marc如果這個答案幫助,請考慮接受它。(Y) – Prabhaker

-1

reversedString具有1的初始長度,因此它的初始最大有效索引將是0。對於任意字符串x大於0(任何非空字符串)長max = x.length()將導致在第一次迭代一個的StringIndexOutOfBoundsException。

+0

感謝您的幫助 – Marc

1

你的問題就在這裏:

String reversedString = " "; 

你寫了幾行後:

j = reversedString.charAt(max); // while the reversedString.length() == 1 

這就是爲什麼你會得到你的錯誤。你已經糊塗x.length()您已inputed到max(6 apperently)和reversedString總是等於「」,從來沒有一個長度大於1

+0

感謝您的幫助 – Marc

1

它看起來像你正在編寫一個程序來扭轉一個字符串。但乍一看,我認爲你離解決方案還很遙遠。

但是別擔心!引發異常的原因是您正在獲取字符串「」中max索引處的字符。字符串「」只有一個字符 - 一個空格。這意味着它只有一個索引,如果您嘗試訪問索引爲6或7或8的字符或某個非0的值,則會發生異常!

爲什麼不使用StringBuilder類中提供的相反方法?它是瘋狂易於使用!將此代碼放入您的reverse方法中:

StringBuilder builder = new StringBuilder(x); 
builder.reverse(); 
x = builder.toString(); 
System.out.println(x); 

讓我們一行一行看一下。

StringBuilder builder = new StringBuilder(x); 

這與x初始串,傳遞到方法的參數創建一個新的StringBuilder

builder.reverse(); 

此行反轉的StringBuilder字符串,又名x

x = builder.toString(); 

這將反轉的字符串分配給x

System.out.println(x); 

你知道,只是打印反向字符串。

+0

感謝您的幫助 – Marc

+0

如果你覺得我的回答可以幫助你,請考慮通過點擊該勾號來接受它。 @Marc – Sweeper