Peuxt on comparer un null avec un élément en dehors du tableau ? (Java)

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjours à tous.

J'aimerais savoir si il est possible de pouvoir comparer un élément qui est en dehors du tableau avec un null. Afin de pouvoir sortir d'une boucle "while", j'aurais besoin d'une méthode me permettant de le faire.

Voici mon code :

public static void main(String[] args) {
        boolean fin = false;
        int hauteur = 5, largeur = 5;
        int[][] tab = new int[hauteur][largeur];
        int parcours = 0, position = largeur - 1, maxLong = hauteur - 1, maxLarg = largeur - 1, minLong = 0, minLarg = 0, i, j;

        for (i = 0; i < hauteur; i++) {
            for (j = 0; j < largeur; j++) {
                tab[i][j] = 0;
            }
        }
        while (!(fin)) {
            switch (parcours) {
                case 0:
                    for (i = position; i >= minLarg; i--) {
                        tab[minLong][i] = 1;
                    }
                    position = minLong;
                    minLong++;
                case 1:
                    for (i = position; i <= maxLong; i++) {
                        tab[i][minLarg] = 1;
                    }
                    position = minLarg;
                    minLarg++;
                case 2:
                    for (i = position; i <= maxLarg; i++) {
                        tab[maxLong][i] = 1;
                    }
                    position = maxLong;
                    maxLong--;
                case 3:
                    for (i = position; i >= minLong; i--) {
                        tab[i][maxLarg] = 1;
                    }
                    position = maxLarg;
                    minLarg++;
            }
            parcours++;
            if (parcours == 4) {
                parcours = 0;
            }
            if (position <= hauteur && position <= largeur && position >= 0 && tab[position][minLarg] <= 0 && tab[position][maxLarg] <= 0 && tab[minLong][position] <= 0 && tab[maxLong][position] <= 0) {
                fin = true;
            }
        }
        for (i = 0; i < hauteur; i++) {
            for (j = 0; j < largeur; j++) {
                System.out.println(tab[i][j]);
            }
        }
    }

J'ai mis cette condition :

if (position <= hauteur && position <= largeur && position >= 0 && tab[position][minLarg] <= 0 &&    tab[position][maxLarg] <= 0 && tab[minLong][position] <= 0 && tab[maxLong][position] <= 0) {
                fin = true;
            }

afin d'échapper à un "ArrayIndexOutOfBoundsException". Mais cela ne fonctionne pas.
Quelqu'un aurais une astuce ?

(Le but de mon projet est de crée un tableau permettant de faire une spirale en 2D).

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    "J'aimerais savoir si il est possible de pouvoir comparer un élément qui est en dehors du tableau avec un null. "
    Je ne comprends pas le sens de la question, ou alors si je comprends, mais quand on arrive à ce genre de question c'est qu'on s'est forcément trompé quelque part avant...
    Ici ta condition de fin c'est quand ton minLarg devient plus grand que ton maxLarg ou que ton minLong devient plus grand que ton maxLong

    Mais il y a d'autres erreurs dans ton code :

    1) tu ne devrais pas déclarer toutes tes variables au début du programme, fait le au fur au mesure, quand tu en as vraiment besoin dans le code.
    2) l'initialisation du tableau avec des valeurs 0 est inutile puisque Java le fait déjà lui même
    3) pour chaque
    case
    d'un
    switch
    tu devrais avoir un
    break
    pour t'arrêter, sinon tu vas faire tous les suivants.
    4) il ne faut pas avoir de variables fourre-tout comme
    position 
    qui va valoir minLong puis minLarg, etc. Parce que l'on ne sait plus si la position c'est une largeur ou une longueur.

    Remarque : en informatique (ou en maths avec les matrices) on parlera plutôt de largeur et hauteur.

    Un exemple :

    public class Main {
        public static void main(String[] args) {
            final int HEIGHT = 5, WIDTH = 5;
            int[][] tab = new int[WIDTH][HEIGHT];
    
            for (int step=0, north=0, west=0, south=HEIGHT-1, east=WIDTH-1; west <= east && north <= south; step++) {
                switch (step % 4) {
                case 0: // north
                    for (int x = west; x <= east; x++) {
                        tab[x][north] = step + 1;
                    }
                    north++;
                    break;
                case 1: // east
                    for (int y = north; y <= south; y++) {
                        tab[east][y] = step + 1;
                    }
                    east--;
                    break;
                case 2: // south
                    for (int x = west; x <= east; x++) {
                        tab[x][south] = step + 1;
                    }
                    south--;
                    break;
                case 3: // west
                    for (int y = north; y <= south; y++) {
                        tab[west][y] = step + 1;
                    }
                    west++;
                    break;
                }
    
                for (int y = 0; y < HEIGHT; y++) {
                    for (int x = 0; x < WIDTH; x++) {
                        System.out.print(tab[x][y]);
                    }
                    System.out.println();
                }
                System.out.println();
            }
        }
    }

    Ce qui donne un affichage détaillé des différentes étapes :
    11111
    00000
    00000
    00000
    00000

    11111
    00002
    00002
    00002
    00002

    11111
    00002
    00002
    00002
    33332

    11111
    40002
    40002
    40002
    33332

    11111
    45552
    40002
    40002
    33332

    11111
    45552
    40062
    40062
    33332

    11111
    45552
    40062
    47762
    33332

    11111
    45552
    48062
    47762
    33332

    11111
    45552
    48962
    47762
    33332
    3
    1. Utilisateur anonyme
       
      Un grand merci KX, pour avez mis en lumière toute mes fautes et de les corriger. Et surtout un tout grand merci pour avoir pris le temps de me montrer les bonnes manières de le faire.
      0