2016-09-21 54 views
-1

我很困難搞清楚這一點,我已經嘗試了不同的方法和解決方法,但我認爲我太害怕,甚至不敢觸摸代碼的錯誤數量,我設法得到每一次!Java ArrayindexOutofBoundsException從字符到int

問題是我試圖從一個字符數組中讀取數據,每個元素中有1000個隨機生成的數字。 我需要顯示這個字符串/字符值在1-6之間的統計數據,並將其存儲到統計數組中,然後將其打印出來。我在哪裏做錯了?

繼承人我的代碼片段:

public static int[] showGame(String tempResult) throws IOException{ 
    int statistics [] = new int [6]; 
    char [] resultat = new char[1000]; 
    String tempStr; 
    try{ 

    BufferedReader indata = new BufferedReader(new FileReader("DiceGame.txt")); 
    tempStr = indata.toString();   
    char result [] = tempStr.toCharArray(); 

     for (int i = 0; i < 1000; i++) {  
         resultat[i] = tempStr.charAt(i); 
       switch (result[i]) { 
        case '1': 
         statistics[0]++; 
         break; 
        case '2': 
         statistics[1]++; 
         break; 
        case '3': 
         statistics[2]++; 
         break; 
        case '4': 
         statistics[3]++; 
         break; 
        case '5': 
         statistics[4]++; 
         break; 
        case '6': 
         statistics[5]++ ; 
         break; 
       }   
      } 
     } catch (IOException ex) { 
      JOptionPane.showMessageDialog(null, "An error occured: " + ex); 
     }catch (NumberFormatException e){ 
     JOptionPane.showMessageDialog(null,"Error: " + e); 
     } 
     //Arrays.toString(statistics); 
     return statistics;  
     } 

編輯:也可能是因爲我不是從主正確調用它?

public static void main(String[] args) throws IOException { 
    int []Statistik = new int[6]; 
    String tossValue = JOptionPane.showInputDialog("set value for amount f toss"); 
    DiceWithArray.Game(tossValue); //Kasta in värdet in i klass metoden 
    String tempToss = DiceWithArray.Game(tossValue); 
    Statistik = DiceWithArray.showGame(tempToss); 
System.out.println("Resultatet : " + Arrays.toString(Statistik)); 
+1

'BufferedReader.toString'不會做你認爲它做的事。你需要使用'BufferedReader'來通過'read'或'readLine'讀取文件,並從中創建一個char數組。 – Zircon

+0

你的indata調試器說什麼?這是你所期望的嗎?長度是否與你想要的一致?它可能不會對任何這些。也。一般來說,如果你打算讀取整個文件,硬編碼是不好的做法。length – CodeMonkey

回答

0

你這樣做:

for (int i = 0; i < 1000; i++) {  
    resultat[i] = tempStr.charAt(i); 

和好,你不能確保tempStr必須是1000個字符或更長的時間。這樣做thta:

for (int i = 0; i < 1000; i++) {  
    if(tempStr.length() <= i) 
    break; 
    resultat[i] = tempStr.charAt(i); 

而且你不能只使用toString上的BufferedReader,通過nextLine方法讀取整個文件,然後做的事情吧。

+0

嗯,我得到它的工作,但統計看起來不正確,我目前得到2,1,0, 0,2,1 – Patt089

+0

謝謝!我試過了掃描儀,現在它寫出了正確的金額! – Patt089