2010-07-08 5 views
2

Tout d'abord, débutant ici.Aide avec les tableaux bidimensionnels

J'utilise ce code.

class MDArrays { 
    public static void main(String[] args) { 
     int[][] x; 
     int t=2; 
     x = new int[2][3]; 

     for(int i=0; i<=1; i++) { 
      for(int j=0; i<=2; j++) { 
       x[i][j] = t; 
       t += 2; 
       System.out.println(x[i][j]); 
      } 
     } 
    } 
} 

Il compile parfaitement, mais lors de son exécution, après avoir affiché 3 chiffres correctement, je reçois l'erreur suivante.

Exception in thread "main" java.Lang.ArrayindexOutOfBoundsException : 3 at MDArrays.main(MDArrays.java:13)

Où vais-je tort?

+0

+1 - Bien que ce soit une simple erreur, la question a une bonne grammaire, et elle est clairement écrite – Andres

Répondre

8

Vous incrémentez j en vérifiant par rapport à i.

for(int j=0; i<=2; j++) 

j gardera éventuellement incrémenter qui vous donnera un IndexOutOfBoundsException

+0

Je n'arrive pas à croire que j'ai mal saisi – MoonStruckHorrors

3
for(int j=0; i<=2; j++) { 

est votre problème. Essayez:

for(int j=0; j<=2; j++) { 
3

Je voudrais écrire comme ceci:

class MDArrays 
{ 
    private static final int ROWS; 
    private static final int COLS; 
    private static final int START_VALUE; 
    private static final int INC_VALUE; 

    static 
    { 
     ROWS  = 2; 
     COLS  = 3; 
     START_VALUE = 2; 
     INC_VALUE = 2; 
    } 

    public static void main(String[] args) 
    { 
     final int[][] x; 
     int   t; 

     x = new int[ROWS][COLS]; 
     t = START_VALUE; 

     for(int row = 0; row < x.length; row++) 
     { 
      for(int col = 0; col < x[row].length; col++) 
      { 
       x[row][col] = t; 
       t += INC_VALUE; 
       System.out.println(x[row][col]); 
      } 
     } 
    } 
} 

La principale différence est que j'utilise l'élément .length plutôt que les valeurs absolues. De cette façon, si je le change en x = new int[3][2]; alors le code fonctionne comme par magie et reste dans ses limites.

L'autre grande différence est que j'utilise row/col au lieu de i/j. Je suis bien (et traditionnel) mais je trouve quand je fais face à des tableaux de tableaux (Java n'a pas réellement de tableaux multidimensionnels) qu'il est plus facile de garder une trace des choses si j'utilise le plus significatif row/col (aide vous empêcher de faire des choses comme for(int col = 0; row < x.length; col++) ... ce qui, d'ailleurs, est le bogue que vous avez

+0

Je voudrais également me débarrasser de ces nombres magiques (2 et 3) en utilisant des finales statiques privées – Joni

+0

ouais, j'allais le faire aussi, mais je ne voulais pas le rendre si différent - mais étant donné que vous vous sentez comme ça aussi je le ferai! – TofuBeer

+0

Vouliez-vous dire x.length? Currentl y à la rangée: pour (int row = 0; row

Questions connexes