Java 如何将二维数组中的每个布尔值更改为其相反的值?

Java 如何将二维数组中的每个布尔值更改为其相反的值?,java,arrays,boolean,2d,Java,Arrays,Boolean,2d,我需要复制一个二维布尔数组,并将每个布尔值更改为其相反的值。。。将true更改为false,将false更改为true。我意识到我的代码中可能还有一些其他问题,但这是我的主要问题 我收到以下错误: 错误:不兼容的类型:无法将布尔[]转换为布尔[][]。 布尔值[][]新数组=新布尔值[array.length] 错误:找不到符号 if(newArray[i][i]=false) if语句中的每个[I]变量都有相同的错误 public class mod4Lec { public stat

我需要复制一个二维布尔数组,并将每个布尔值更改为其相反的值。。。将true更改为false,将false更改为true。我意识到我的代码中可能还有一些其他问题,但这是我的主要问题

我收到以下错误:

错误:不兼容的类型:无法将布尔[]转换为布尔[][]。
布尔值[][]新数组=新布尔值[array.length]

错误:找不到符号
if(newArray[i][i]=false)

if语句中的每个[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;

 }
}
公共类mod4Lec
{
公共静态void main(字符串[]args){
//创建布尔值数组
布尔[][]数组={
{真,假,真,假},
{假,真,假,真},
{真,假,真,假},
{假,真,假,真},
};
System.out.println(“之前:”);
//打印原始阵列

对于(int row=0;row,只需迭代数组并执行

array[row][column] = ! array[row][column];
甚至更短:

array[row][column] ^= true;
(使用XOR运算符“求反”矩阵中每个单元格的当前内容)

这就是切换布尔值所需的全部内容!完全不需要创建另一个数组。那里的所有代码都可能消失

因此,真正的答案是:在研究数组之前,先学习布尔类型的所有基础知识。意思是:理解像!这样的运算符,而不是为了正确使用它们。

我对您的代码进行了一些注释(和修改),请仔细研究

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;
    }
}
公共类Mod4Lec{//类名以大写字母开头
公共静态void main(字符串[]args){
//创建布尔值数组
布尔[][]数组={{true,false,true,false},{false,true,false,true},{true,false,true,false},
{假,真,假,真},};
System.out.println(“之前:”);
//打印原始阵列
for(int row=0;row
我认为错误信息很清楚。你为什么不同意?一件事:你需要==来比较两个布尔值。你在if条件中使用single=是赋值,而不是比较!我不知道如何修复错误。
new boolean[array.length]
初始化1D数组。你想要2D数组。或者
array[x][y]^=true
,这样做的好处是不会重复你自己的话。@再次感谢;-)谢谢你的建议。