1
votes

Remplir un tableau 2D en Java et obtenir ExceptionOutOfBounds

J'ai recherché certaines entrées, mais je n'ai pas pu répondre correctement à ma question moi-même.

J'essaie de remplir un tableau à 2 dimensions avec des valeurs. Comme test, je fais actuellement cela en essayant de remplir le tableau avec le nombre entier 1.

Je ne comprends pas mon erreur.

public static void creatBoard () { 
        
        final int L = 6; 
        final int H = 6; 
        
        // Modell: 
        
        int [] [] board = new int [L] [H]; 
        for (int i = 0; i<=board.length; i++) {
            for (int j = 0; j<=board.length; j++) {
                board [i] [j] = 1; 
            }
            System.out.println("");
            
            
        }

p >


1 commentaires

L'index d'un tableau commence à 0. Vous avez créé un tableau de taille 6, les index de votre tableau vont donc de 0 à 5. Vos boucles vont de 0 à 6 (à cause de la notation <= ). Ainsi, lorsque votre boucle atteint l'indice 6, votre tableau devient OutOfBounds.


3 Réponses :


1
votes

Utilisez l'index 0 à la longueur-1 (comme l'index du tableau commence par 0)

    public static void creatBoard () { 
            
            final int L = 6; 
            final int H = 6; 
            
            // Modell: 
            
            int [] [] board = new int [L] [H]; 
            for (int i = 0; i<board.length; i++) {
                for (int j = 0; j<board[i].length; j++) {
                    board [i] [j] = 1; 
                }
                System.out.println("");           
            }
}


0 commentaires

0
votes

il suffit de le déboguer et vous pouvez voir que

for (int i = 0; i<board.length; i++) {
        for (int j = 0; j<board[i].length; j++) {
            board [i] [j] = 1; 
        }
        System.out.println("");     
    }

i et j changent les valeurs de 0 à 6, cela signifie qu'il est hors des limites des tableaux (vous itérez sur 7 éléments, au lieu de 6), supprimez simplement = les corps de boucle de connexion

for (int i = 0; i<=board.length; i++) {
        for (int j = 0; j<=board.length; j++) {
            board [i] [j] = 1; 
        }
        System.out.println("");
        
        
    }


0 commentaires

0
votes

Votre tableau de bord est de taille 6x6, donc la board.length est de 6.

Lorsque vous exécutez la boucle for (int j = 0; j <= board.length; ij +) , elle s'exécute de 0 à 6 mais l'indexation du tableau est de 0 à 5. Donc lorsque j = 6, ExceptionOutOfBounds se produit car il fera référence à l'index board [0] [6] .

Modifiez la condition dans les deux boucles de <= board.length à


2 commentaires

Merci beaucoup ! J'ai encore une petite question. Si j'ai un array 2 D int [] [] = board = new [6] [7] quel est le .length ? Est-ce le 6 ou le 7


@ quarante4seven Lorsque vous faites array.length, cela vous donne le nombre de lignes dans le tableau. Si votre tableau est [6] [7], le array.length vous donnera 6. Si vous voulez la longueur d'une ligne spécifique, vous devez faire columnLength = array [0] .length .. Regardez ici pour plus de détails: stackoverflow.com/questions/4000169/…