2016-09-21 2 views
-1

Ich habe die Mühe, dies herauszufinden, ich habe verschiedene Methoden und Workarounds ausprobiert, aber ich denke, ich bin zu ängstlich, den Code für die Menge der Fehler zu berühren, die ich jedes Mal bekomme !Java ArrayindexOutofBoundsException von char zu int

Das Problem ist, dass ich versuche, einfach von einem Char-Array zu lesen, die derzeit 1000 zufällig generierte Zahlen in jedem Element hat. Ich muss Statistiken über diese String/chars-Werte anzeigen, die zwischen 1-6 liegen und sie in einem Statistik-Array speichern und dann ausdrucken. Wo mache ich etwas falsches?

Heres ein Ausschnitt aus meinem Code:

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;  
     } 

EDIT: Oder könnte es sein, weil ich nicht bin es richtig von dem Haupt Aufruf ?!

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' macht nicht, was Sie denken, dass es tut. Sie müssen den 'BufferedReader' verwenden, um die Datei über' read' oder 'readLine' zu ​​lesen und daraus ein char-Array zu erstellen. – Zircon

+0

Was sagt Ihr Debugger über Indata? Ist es das, was Sie erwartet haben? Passt die Länge zu dem, was Sie wollen? Es wird wahrscheinlich keiner von diesen sein. Ebenfalls. im Allgemeinen ist es eine schlechte Übung, diese 1000 zu programmieren, wenn Sie beabsichtigen, die ganze Datei zu lesen. length – CodeMonkey

Antwort

0

Sie tun:

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

und gut, kann man nicht sicher sein, dass tempStr 1000 Zeichen oder länger sein muss. so etwas wie die nah tun:

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

Und Sie können nur toString nicht auf BufferedReader verwenden, lesen Sie die gesamte Datei von nextLine Methode, tun dann Dinge mit ihm.

+0

Hmm ich habe es geschafft zu arbeiten, aber die Statistik scheint nicht richtig zu sehen, ich bekomme gerade 2,1,0, 0,2,1 – Patt089

+0

danke! Ich habe den Scanner ausprobiert und es schreibt nun die Menge richtig aus! – Patt089