2016-09-21 1 views
-1

J'ai tout à fait du mal à comprendre cela, j'ai essayé différentes méthodes et solutions, mais je pense que j'ai trop peur de toucher le code pour la quantité d'erreurs que je parviens à obtenir à chaque fois ! Le problème est que j'essaie simplement de lire à partir d'un tableau char qui a actuellement 1000 nombres générés de manière aléatoire dans chaque élément. J'ai besoin de montrer des statistiques sur ces valeurs String/chars qui vont de 1-6 et les stocker dans un tableau de statistiques, puis l'imprimer .. Où est-ce que je fais mal?Java ArrayindexOutofBoundsException de char à int

Heres un extrait de mon 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: Ou pourrait-il être parce que je ne suis pas l'appeler correctement de la principale ?!

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

Vous devez utiliser 'BufferedReader' pour lire le fichier via' read' ou 'readLine' et en faire un tableau char. – Zircon

+0

Que dit votre débogueur d'indata? Est-ce ce que vous attendiez? la longueur s'aligne-t-elle avec ce que vous voulez? Ce ne sera probablement pas à l'un de ceux-ci. Aussi. en général il est mauvais de coder en dur que 1000 si vous avez l'intention de lire l'ensemble du fichier .length – CodeMonkey

Répondre

0

vous faites:

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

et bien, vous ne pouvez pas être sûr que tempStr doit être 1000 caractères ou plus. Est-ce que quelque chose comme CGU:

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

Et vous ne pouvez pas utiliser toString sur BufferedReader, lisez le fichier entier par nextLine méthode, puis faire des choses avec elle. `BufferedReader.toString` ne fait pas ce que vous pensez qu'il fait.

+0

Hmm je l'ai eu au travail mais la statistique ne semble pas bien paraître, je reçois actuellement 2,1,0, 0,2,1 – Patt089

+0

merci! J'ai essayé le scanner et il écrit maintenant la quantité correctement! – Patt089