web-dev-qa-db-fra.com

Exception d'index de tableau hors limites (Java)

Voici mon code:

public class countChar {

    public static void main(String[] args) {
        int i;
        String userInput = new String();

        userInput = Input.getString("Please enter a sentence");

        int[] total = totalChars(userInput.toLowerCase());

        for (i = 0; i < total.length; i++);
        {
            if (total[i] != 0) {
                System.out.println("Letter" + (char) ('a' + i) + " count =" + total[i]);
            }
        }
    }

    public static int[] totalChars(String userInput) {
        int[] total = new int[26];
        int i;
        for (i = 0; i < userInput.length(); i++) {
            if (Character.isLetter(userInput.charAt(i))) {
                total[userInput.charAt(i) - 'a']++;
            }
        }
        return total;
    }
}

Le programme a pour but de demander à l'utilisateur une chaîne, puis de compter le nombre de fois que chaque caractère est utilisé dans la chaîne. 

Quand je vais compiler le programme, cela fonctionne bien. Lorsque je lance le programme, je peux entrer une chaîne dans la boîte de dialogue, mais après avoir envoyé la chaîne et appuyé sur OK, un message d'erreur s'affiche: 

Exception in thread "main" Java.lang.ArrayIndexOutOfBoundsException: 26
at countChar.main(countChar.Java:14)

Je ne suis pas complètement sûr du problème ni de la façon de le résoudre.

6
Boxasauras
for ( i = 0; i < total.length; i++ );
                                    ^-- remove the semi-colon here

Avec ce point-virgule, la boucle boucle jusqu'au i == total.length, ne fait rien, puis le corps de la boucle que vous pensiez être exécuté.

15
JB Nizet
for ( i = 0; i < total.length; i++ ); // remove this
{
    if (total[i]!=0)
        System.out.println( "Letter" + (char)( 'a' + i) + " count =" + total[i]);
}

La boucle for boucle jusqu'au i=26 (où 26 est total.length), puis votre if est exécutée, en dépassant les limites du tableau. Supprimez le ; à la fin de la boucle for.

7

C'est très bon exemple de moins Longueur d'un tableau en Java, je donne ici les deux exemples

 public static int linearSearchArray(){

   int[] arrayOFInt = {1,7,5,55,89,1,214,78,2,0,8,2,3,4,7};
   int key = 7;
   int i = 0;
   int count = 0;
   for ( i = 0; i< arrayOFInt.length; i++){
        if ( arrayOFInt[i]  == key ){
         System.out.println("Key Found in arrayOFInt = " + arrayOFInt[i] );
         count ++;
        }
   }

   System.out.println("this Element found the ("+ count +") number of Times");
return i;  
}

ceci ci-dessus i <arrayOFInt.length; pas besoin de moins un par la longueur du tableau; mais si vous <= arrayOFInt.length -1; est nécessaire autrement sage arrayOutOfIndexException Occur, espérons que cela vous aidera. 

0
Ayaz Akbar

Vous devriez enlever ceci

for (i = 0; i < total.length; i++);
0
El Viruz Exe