2016-02-12 41 views
4

下面是我正在處理的一些代碼,我想我會讓自己成爲一個二進制計算器,讓我的生活變得輕鬆一些。但是,當我運行它時,出現錯誤,告訴我有一個Java.lang.StringIndexOutofBoundsException。我真的不知道如何解決它,因爲據我所知,我所做的一切正確:轉換爲二進制 - 獲取IndexOutOfBoundsException

private static void ten() 
{ 
    Scanner scan = new Scanner(System.in); 

    System.out.println("What number would you like to convert to binary?"); 
    System.out.print("Enter the integer here: "); 
    int x = scan.nextInt(); 

    String bon = Integer.toString(x , 2); 

    int myArrays [ ] = new int [ 7 ]; 

    myArrays[0] = bon.charAt(0); 
    myArrays[1] = bon.charAt(1); 
    myArrays[2] = bon.charAt(2); 
    myArrays[3] = bon.charAt(3); 
    myArrays[4] = bon.charAt(4); 
    myArrays[5] = bon.charAt(5); 
    myArrays[6] = bon.charAt(6); 
    myArrays[7] = bon.charAt(7); 

    for (int i = 0; i < myArrays.length; i++) 
    { 
     System.out.print(myArrays [ i ] + " "); 
     int count = 0; 
     count++; 
     if (count == 10) { 
      System.out.println(); 
      count = 0; 
     } 
    } 

} 
+0

您需要執行一些基本的調試:讀你的異常的堆棧跟蹤,因爲它告訴你到底是哪一行導致了問題。然後,在該行之前添加一些'System.out.println'語句*,以便您可以看到您的String和您嘗試訪問的索引。 – VGR

+0

我在這裏有點困惑。有些人說我應該增加一個數組,另外一些人說我應該減少一個數組。我該怎麼做? – arsb48

+0

完全擺脫陣列。 – erickson

回答

0

好了,所以你有大小7數組,它只是給你0-6,但您對數組調用[7]因此通過一個

+0

我以爲數組從元素「0」開始? – arsb48

+1

這是一個很好的提示,但這不是他的直接問題。 – erickson

+0

你對數組大小是正確的(應該是數組[8])。但是,這不是他得到IndexOutOfBoundsException的地方 - 它在代碼行:myArrays [3] = bon.charAt(3); – pczeus

0

myArrays增加數組的大小是7元len個數組,如果你做業務從0到7,你會超出限制..從

試0到6!

0

你的數組大小需要較大... int myArrays [ ] = new int [ 8 ];

0

有在你的代碼要注意兩點:

int myArrays [] = new int [7]; 

應改爲:

int myArrays [] = new int [8]; 

2.

您在不檢查變量bon是否有足夠的字符的情況下致電bon.charAt()

1

根據輸入的數字,二進制字符串的長度將有所不同。如果你輸入0或1,你會得到「0」或「1」。但是你的代碼假設你的數字有8位。這意味着只有在第八位被設置的情況下它纔會工作。

看起來您正嘗試打印由空格分隔的位,後跟一個新行。這將是更好用更直接的方法:

String b = Integer.toString(x, 2); 
for (int idx = 0; idx < b.length(); ++idx) { 
    System.out.print(b.charAt(idx)); 
    System.out.print(' '); 
} 
System.out.println(); 
0

Java.lang.StringIndexOutofBoundsException差不多表示字符串的長度小於索引。你應該考慮長度。還有其他人提到的其他數組越界。

0

試試這個:

替換這些2線:

String bon = Integer.toString(x , 2); 
int myArrays [ ] = new int [ 7 ]; 

有了這些線(1只顯示初始值):

String byteString = Integer.toBinaryString(x & 0xFF); 
byteString = String.format("%8s", byteString).replace(' ', '0'); 
int[] myArrays = new int[8]; 
System.out.println("(" + byteString + ")");