Menu

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

Messages postés
2
Date d'inscription
mardi 12 février 2019
Dernière intervention
12 février 2019
-
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).
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
15937
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
14 février 2019
3525
1
Merci
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

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 58167 internautes nous ont dit merci ce mois-ci

jaber05
Messages postés
2
Date d'inscription
mardi 12 février 2019
Dernière intervention
12 février 2019
-
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.
Commenter la réponse de KX