2017-02-12 11 views
0

Мне нужно скопировать 2D булевский массив и изменить каждое значение boolean на его противоположное ... Измените true на false и false на true. Я понимаю, что у меня также есть некоторые другие проблемы в моем коде, но это моя основная проблема.Как я могу изменить каждое логическое значение в 2D-массиве на противоположное?

Я получаю следующие ошибки:

ошибка: несовместимые типы: логическое [] не может быть преобразовано в булево [] []
логический [] [] newArray = новый логический [array.length];

ошибка: не удается найти символ
если (newArray [я] [я] = ложь)

У меня такая же ошибка для каждого [I] переменной в если заявления.

public class mod4Lec 
{ 
public static void main(String[] args) { 

//Creates array of boolean 
boolean[][] array = { 
{true, false, true, false}, 
{false, true, false, true}, 
{true, false, true, false}, 
{false, true, false, true}, 
}; 

System.out.println("Before: "); 
//Prints original array 

for(int row=0; row<array.length; row++) { 
    for(int column=0; column<array[row].length; column++) 
     System.out.print(array[row][column] + " "); 
    System.out.println(); 
    } 
} 

//Pass array to method 
public static void swapArray(boolean[][] array){ 

//Copy array 


boolean[][] newArray = new boolean[array.length]; 
for (int column = 0; column < array.length; column++) 
newArray[row][column] = array[row][column]; 

//Search for boolean true and switch to false 
for (int i = 1; i < newArray.length; i++){ 
if(newArray[i][i] = true) 
newArray[i][i] = false; 
    } 
//Search for boolean false and switch to true 
if(newArray[i][i] = false){ 
    newArray[i][i] = true; 
} 
    return newArray; 

} 
} 
+0

Я думаю, что сообщение об ошибке достаточно ясно. Почему вы не согласны? –

+0

Одна вещь: вам нужно == СРАВИТЬ два булева. Ваше использование single = в условиях if является НАЗНАЧЕНИЕМ, а не сравнением! – GhostCat

+0

Я не знаю, как исправить ошибку. – user3403708

ответ

-1

Я немного прокомментировал (и изменил) ваш код, изучите его.

public class Mod4Lec { //class names are started from Uppercase letter 
    public static void main(String[] args) { 

     // Creates array of boolean 
     boolean[][] array = { { true, false, true, false }, { false, true, false, true }, { true, false, true, false }, 
       { false, true, false, true }, }; 

     System.out.println("Before: "); 
     // Prints original array 

     for (int row = 0; row < array.length; row++) { 
      for (int column = 0; column < array[row].length; column++) 
       System.out.print(array[row][column] + " "); 
      System.out.println(); 
     } 

     boolean[][] newArray = swapArray(array); 
     System.out.println("After: "); 
     for (int row = 0; row < newArray.length; row++) { 
      for (int column = 0; column < newArray[row].length; column++) 
       System.out.print(newArray[row][column] + " "); 
      System.out.println(); 
     } 

    } 

    // Pass array to method 
    public static boolean[][] swapArray(boolean[][] array) { //return 2d array, not void 
     // Copy array 
     // you should have 2d array here, my guess is that every array "row" is of the same size 
     boolean[][] newArray = new boolean[array.length][array[0].length]; 
     // again, we have 2d array and need to go for each rows to each columns 
     for (int row = 0; row < array.length; row++) { 
      for (int column = 0; column < array[row].length; column++) 
       newArray[row][column] = array[row][column]; 
     } 
     // Search for boolean true and switch to false 
     // the same 2d 
     for (int i = 0; i < newArray.length; i++) { 
      for (int j = 0; j < newArray[i].length; j++) //2nd dimension 
       newArray[i][j] = !newArray[i][j]; // just invert 
     } 
     return newArray; 
    } 
} 
+0

Спасибо за ваши предложения. – user3403708

2

Просто перебирать массив и пойти на

array[row][column] = ! array[row][column]; 

или еще короче:

array[row][column] ^= true; 

(с помощью оператора XOR для «свести на нет» текущее содержимое каждой ячейки в Вашей матрице)

Это все, что вам нужно до toggle булево значение! Абсолютно нет необходимости создавать другой массив. Весь ваш код там может исчезнуть!

Итак, реальный ответ: узнайте все основы булевого типа ... Прежде чем смотреть в массив. Смысл: понять, как работают операторы! не так, чтобы вы могли их правильно использовать.

+0

Или 'array [x] [y]^= true', что имеет то преимущество, что вы не повторяетесь. –

+0

@AndyTurner Еще раз спасибо ;-) – GhostCat