2015-02-11 57 views
-1

我是初學者,誰能幫我弄清楚我們正在做什麼。我試圖讀取一個字符串並將字符串的每個字符存儲在一個數組中。Java:線程「main」中的異常java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:

import java.util.Scanner; 

public class CoreMainDigitExtractor { 

    static Scanner inputString = new Scanner(System.in); 

    public static void main(String[] args) { 


     digitExtractor ExtracDig = new digitExtractor(); 

     System.out.println("Enter a String to Extract and Display Vertically in Reverse Order : "); 
     String input1 = inputString.nextLine(); 
     System.out.println("User input String is : " + input1); 
     System.out.println("Calling Method 'OrderByMaths' in Object 'ExtracDig' of Class 'digitExtractor', with User Input String....'"+input1+"'");  
     ExtracDig.OrderbyMaths(input1); 

    } 

} 




public class digitExtractor { 

    int tNumber; 

    public digitExtractor() { 
     // TODO Auto-generated constructor stub 
    } 

    public void OrderbyMaths(String numberSequence) { 
     System.out.println("OrderbyMatch : Inside Method 'OrderbyMaths'...."); 
     System.out.println("OrderbyMatch : Initializing a variable of type int 'tNumberLength'."); 
     int tNumberLength = numberSequence.length(); 
     System.out.println("OrderbyMatch : Variable Initialized of type int 'tNumberLength'."); 
     System.out.println("OrderbyMaths : Capture length of User Input String into Variable 'tNumberLength'."); 
     System.out.println("OrderbyMaths : The length of User Input String in Variable 'tNumberLength' is '" + tNumberLength + "'."); 
     System.out.println("OrderbyMatch : Initializing an Array of type int 'arrNumberSequence'; with Size of Array equal to 'tNumberLength'."); 
     char arrNumberSequence[] = new char[tNumberLength]; 
     System.out.println("OrderbyMatch : Initialized Array 'arrNumberSequence' with Size '" + arrNumberSequence.length + "'"); 
     int i = 0; 

     while (i <= arrNumberSequence.length){ 
      arrNumberSequence[i] = numberSequence.charAt(i); 
      System.out.println("OrderbyMatch : Value in Array Slot '"+arrNumberSequence[i]+"' is '"+ numberSequence.charAt(i)+"'"); 
      i++;  

     } 

    } 

} 

輸出

輸入字符串提取和逆頁序縱向顯示:

HACK

用戶輸入字符串是:HACK

在對象上調用方法 'OrderByMaths'類'digitExtractor'的'ExtracDig',用戶輸入字符串....'HACK'

OrderbyMatch:內部方法'OrderbyMaths'...

OrderbyMatch:初始化一個int'tNumberLength'類型的變量。

OrderbyMatch:變量已初始化爲int'tNumberLength'類型。

OrderbyMaths:將用戶輸入字符串的長度捕獲到變量'tNumberLength'中。

OrderbyMaths:變量'tNumberLength'中用戶輸入字符串的長度爲'4'。

OrderbyMatch:初始化一個int類型的數組'arrNumberSequence';數組大小等於'tNumberLength'。

OrderbyMatch:初始化數組 'arrNumberSequence' 與尺寸 '4'

OrderbyMatch:在陣列插槽 'H' 值是 'H'

OrderbyMatch:值在陣列插槽 'A' 是 'A'

OrderbyMatch:在陣列插槽 'C' 的值是 'C'

OrderbyMatch:在陣列插槽 'K' 值是 'K'

在異常THRE ad「main」java.lang.StringIndexOutOfBoundsException:String index超出範圍:4 at java.lang.String.charAt(Unknown Source) at digitExtractor.OrderbyMaths(digitExtractor.java:23) at CoreMainDigitExtractor.main(CoreMainDigitExtractor。的java:16)

問候

Dwenish

+0

我想,同時'我<= arrNumberSequence.length'是總是如此在循環,'我<= numberSequence.length'沒有按」必須是真實的。 – cangoektas 2015-02-11 20:59:02

+0

你會不會建議不使用WHILE循環? – dwenish 2015-02-11 21:06:41

+0

我稍微改了一下代碼,雖然在代表性方面看起來更好。但是,錯誤仍然存​​在。 – dwenish 2015-02-11 21:07:18

回答

4

對於字符串HACK我們有4.length。在Java中索引0開始,所以我們必須

['H','A','C','K'] 
^^^^
    0 1 2 3 

所以讓我們在while循環i=4

while (i <= arrNumberSequence.length) 
while (is 4 less than or equal to 4? yes 4==4 so continue with the loop) 

說,當我們試圖訪問charAt(4)它不是我們的字符串有效的索引

['H','A','C','K'] 
^^^^^
    0 1 2 3 4 

所以我們得到例外

java.lang.StringIndexOutOfBoundsException: String index out of range: 4 
+0

謝謝你所有 我<4工作。 – dwenish 2015-02-11 21:10:43

0

的問題是在這裏:

while (i <= arrNumberSequence.length){ 

字符串的長度 「黑客」 是4。索引是0,1,2,3。 你的循環迭代從0到4(包括4),所以在最後一次迭代中它調用了超出索引的arrNumberSequence [4]。

只需刪除 '=',你會被罰款:

while (i < arrNumberSequence.length) 
0

更改此:

while (i <= arrNumberSequence.length) 

成這樣:

while (i < arrNumberSequence.length) 
相關問題