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

Résolu/Fermé
Utilisateur anonyme - Modifié le 12 févr. 2019 à 07:54
 Utilisateur anonyme - 12 févr. 2019 à 21:48
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).
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
12 févr. 2019 à 20:48
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
Utilisateur anonyme
12 févr. 2019 à 21:48
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