2016-10-12 1 views
1

Je ne fais que commencer avec java et je suis confronté à un problème de base. J'ai un tableau booléen 2d que je veux alimenter aléatoirement ... vous ne le devinerez pas ... booléens! C'est la méthode que j'ai en ce moment, mais il semble que le tableau est rempli avec juste 'faux' après l'avoir exécuté.Impossible d'affecter des valeurs à un tableau booléen 2d

public static void randBoard() { 
    for(boolean[] item : board) { 
     for(boolean square : item) { 
      square = Math.random() < .5; 
     } 
    } 
} 
+3

Vous venez de définir la variable locale 'square' dans la boucle' foreach'. Utilisez la boucle d'itération 'pour (i = 0; i SomeJavaGuy

Répondre

1

que tu veux dire peut-être quelque chose comme ça?

int d1 = 5; 
int d2 = 5; 
boolean[][] board = new boolean[d1][d2]; 
for(int i=0; i<d1; i++) { 
    for(int j=0; j<d2; j++) { 
    boolean square = Math.random() < .5; 
    board[i][j] = square; 
    System.out.print("[" + board[i][j] + "]"); 
    } 
    System.out.println(); 
} 
1

Comme Kevin Esche a déclaré: si vous pour chaque boucle à travers les booléens que vous obtenez des objets de valeur, mais vous voulez le mettre à la référence. Cela signifie que la position dans la liste doit être définie.

Il devrait fonctionner avec le code suivant:

public static void randBoard() { 
    Random random = new Random(); 
    for(int i =0; i<board.length;i++) { 
     boolean[] item = board[i]; 
     for(int j= 0;j<item.length;j++) { 
      item[j]= random.nextBoolean(); 
     } 
    } 
} 
+1

Notez que vous pouvez utiliser un pour chaque boucle pour la boucle externe; c'est juste la boucle interne qui doit être un "vieux" pour la boucle afin de mettre à jour les éléments. –

+0

Je ne savais pas que pour chaque boucle n'a pas fourni de référence, merci pour l'aide. – UncraftedName

+1

@UncraftedName les types de variable avec des minuscules (int, float, long, boolean, etc) sont des primitives. Ils sont copiés dans ces cas. Les variables avec le premier supérieur (Integer, Float, Long, Boolean, la plupart des classes, etc) sont des objets et seront transmis par référence. Cela signifie que votre code aurait aussi pu fonctionner si vous utilisiez Boolean au lieu de boolean! –