将传递的2D布尔数组的所有值设置为false?

时间:2015-10-23 08:25:13

标签: java arrays boolean 2d

我有一个名为'test'的2D布尔值,其中包含'true'和'false'的内容,随机设置。

我正在尝试创建一个方法,将'test'的所有内容设置为false。

这是我的尝试:

public static void clearArray( boolean[][] test) {
    Arrays.fill(test[1], false);
}   

如果你想知道为什么我在那里[1],答案是“我不知道。至少eclipse会让我运行它。”

有谁知道这样做的正确方法?

一如既往地感谢stackoverflow。

6 个答案:

答案 0 :(得分:4)

public static void clearArray( boolean[][] test) {
    for (boolean[] row: test) 
      Arrays.fill(row, false);
} 

答案 1 :(得分:3)

你几乎是正确的,只需遍历数组的第一级,并在每个第二级数组上调用Arrays.fill

public static void clearArray( boolean[][] test) {
  for( boolean[] secondLvl : test ) {
   Arrays.fill( secondLvl , false);
  }
}  

请注意,2D数组基本上只是一个数组数组,即如果你有boolean[][],你会得到一个布尔数组数组。请注意,必须首先初始化第二级数组(即内部boolean[]),即在创建2D数组之后,所有内部数组都为空。

答案 2 :(得分:2)

试试这个。从逻辑上讲,这是正确的方法:

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

或者可以按照您想要的方式完成,例如:

for(int i=0; i<test.length; i++) {
    Arrays.fill(test[i], false);
}

答案 3 :(得分:2)

那是因为Arrays.fill需要单个数组。

public static void clearArray( boolean[][] test) 
{   
  for ( int i=0 ; i < test.rowCount; i++)
     Arrays.fill(test[i], false);     
}

答案 4 :(得分:2)

public static void clearArray( boolean[][] test) {
    for(boolean[] inTest: test)
        Arrays.fill(inTest, false);

} 

答案 5 :(得分:2)

还有streams方法:

public static void clearArray(boolean[][] b) {
    Arrays.stream(b).forEach(a -> Arrays.fill(a, false));
}

public void test() {
    boolean[][] b = new boolean[4][4];
    for (int i = 0; i < b.length; i++) {
        b[i][i] = true;
    }
    System.out.println("Before:" + Arrays.deepToString(b));
    clearArray(b);
    System.out.println("After:" + Arrays.deepToString(b));
}