2017-01-25 2 views
-3

Я хочу изменить булевский массив. free - массив. Вот мой код:Как отменить булевский массив в java?

public boolean[][] free = new boolean[6][6]; 

free = !free; 

Я получаю сообщение об ошибке говорящей оператора ! не определен. Что мне делать?

EDIT Не пуст. Я просто хочу инвертировать значения.

public boolean[][] free = new boolean[6][6]; 
    void initFree(State s) { 

     for (int i = 0; i < nbcars; i++){ 
      if (horiz[i]){ 

       for (int j = 0; j < (len[i]-1); j++)   
        free[moveon[i]][s.pos[i]+j]=true; 


      } 
      if (!horiz[i]){ 

       for (int j = 0; j < (len[i]-1); j++)   
        free[s.pos[i]+j][moveon[i]]=true; 
      } 
     } 
     free = !free; 
    } 
+3

Я не могу думать ни о чем другом, кроме цикла –

ответ

2

Вы получаете оператора! не определено просто потому, что Java не определяет! оператора на двумерном булевом массиве.

Один из способов добиться того, чего вы хотите, путем повторения каждого значения, а затем использовать! оператор.

for(int i=0; i<free.length; i++) 
{ 
    for(int j=0; j<free[i].length; j++) 
    { 
     free[i][j] != free[i][j]; 
    } 
} 
2

Вот простой пример, который вы можете изменить для своих целей. Я включил метод инвертирования.

public class StackOverflowExample { 

public static void main(String[] args) { 
    int ROW = 10, COL = 10; 
    boolean[][] ATwoDBoolArray = new boolean[ROW][COL]; 

    PutValuesInArray(ATwoDBoolArray); 
    printArray(ATwoDBoolArray); 
    invertArray(ATwoDBoolArray); 
    printArray(ATwoDBoolArray); 

} 

private static boolean[][] PutValuesInArray(boolean array[][]) { 

    for (int i = 0; i < array.length; i++) { 
     for (int j = 0; j < array[i].length; j++) { 
      array[i][j] = false; 

     } 

    } 

    return array; 
} 

private static void printArray(boolean[][] array){ 
    for (int i = 0; i < array.length; i++) { 
     for (int j = 0; j < array[i].length; j++) { 
      System.out.println(array[i][j]); 

     } 

    } 

} 

private static boolean[][] invertArray(boolean array[][]){ 
    for (int i = 0; i < array.length; i++) { 
     for (int j = 0; j < array[i].length; j++) { 
      if(array[i][j]){ 
       array[i][j] = false; 

      }else{ 
       array[i][j] = true; 

      } 

     } 

    } 


    return array; 
} 

} 
1

Этот метод инвертирует все значения в заданном двумерном булевом массиве.

static void invertBooleanArray(boolean[][] arr) { 
    for (int i = 0; i < arr.length; i++) 
     for (int j = 0; j < arr[0].length; j++) 
      arr[i][j] = !arr[i][j]; 
} 
Смежные вопросы