如何将二维数组中的每个布尔值更改为相反的值?
How can I change every boolean value in a 2D array to its opposite?
我需要复制一个二维布尔数组并将每个布尔值更改为相反的值...将 true 更改为 false,将 false 更改为 true。我意识到我的代码中可能还有一些其他问题,但这是我的主要问题。
我收到以下错误:
错误:类型不兼容:boolean[] 无法转换为 boolean[][]
布尔[][] newArray = 新布尔[array.length];
错误:找不到符号
如果(新数组[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;
}
}
只需遍历数组并寻找
array[row][column] = ! array[row][column];
甚至更短:
array[row][column] ^= true;
(使用 XOR 运算符 "negate" 矩阵中每个单元格的当前内容)
这就是您 切换 一个布尔值所需的全部!绝对不需要创建另一个数组。您那里的所有代码都可能消失!
所以真正的答案是:学习布尔类型的所有基础知识......在研究数组的东西之前。含义:理解运算符喜欢!不是这样你就可以正确使用它们。
我对你的代码做了一些评论(和修改),研究一下。
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;
}
}
我需要复制一个二维布尔数组并将每个布尔值更改为相反的值...将 true 更改为 false,将 false 更改为 true。我意识到我的代码中可能还有一些其他问题,但这是我的主要问题。
我收到以下错误:
错误:类型不兼容:boolean[] 无法转换为 boolean[][]
布尔[][] newArray = 新布尔[array.length];
错误:找不到符号
如果(新数组[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;
}
}
只需遍历数组并寻找
array[row][column] = ! array[row][column];
甚至更短:
array[row][column] ^= true;
(使用 XOR 运算符 "negate" 矩阵中每个单元格的当前内容)
这就是您 切换 一个布尔值所需的全部!绝对不需要创建另一个数组。您那里的所有代码都可能消失!
所以真正的答案是:学习布尔类型的所有基础知识......在研究数组的东西之前。含义:理解运算符喜欢!不是这样你就可以正确使用它们。
我对你的代码做了一些评论(和修改),研究一下。
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;
}
}