簡體   English   中英

如何將2D數組中的每個布爾值更改為相反的值?

[英]How can I change every boolean value in a 2D array to its opposite?

我需要復制一個2D布爾數組並將每個布爾值更改為相反的值...將true更改為false,將false更改為true。 我意識到我的代碼中也可能存在其他一些問題,但這是我的主要問題。

我收到以下錯誤:

錯誤:類型不兼容:boolean []無法轉換為boolean [] []
boolean [] [] newArray =新的boolean [array.length];

錯誤:找不到符號
if(newArray [i] [i] =假)

對於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;

 }
}

只需迭代數組並繼續

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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM