【问题标题】:Set all values of a passed 2D boolean array to false?将传递的二维布尔数组的所有值设置为 false?
【发布时间】:2016-01-22 17:25:55
【问题描述】:

我有一个名为“test”的 2D 布尔值,它的内容为“真”和“假”,随机设置。

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

这是我的尝试:

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

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

有人知道正确的方法吗?

一如既往地感谢你,stackoverflow。

【问题讨论】:

  • 那是因为它需要单个数组

标签: java arrays boolean 2d


【解决方案1】:

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

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

【讨论】:

  • 我认为您缺少i :)。
  • @Thomas 如果您指的是test[].length,如果它不是方形数组和具有不同子长度的二维数组,那么是的。已编辑:)
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    那是因为Arrays.fill 采用单个数组。

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

    【讨论】:

      【解决方案4】:
      public static void clearArray( boolean[][] test) {
          for (boolean[] row: test) 
            Arrays.fill(row, false);
      } 
      

      【讨论】:

        【解决方案5】:
        public static void clearArray( boolean[][] test) {
            for(boolean[] inTest: test)
                Arrays.fill(inTest, false);
        
        } 
        

        【讨论】:

          【解决方案6】:

          还有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));
          }
          

          【讨论】:

            猜你喜欢
            • 2016-06-24
            • 2014-01-19
            • 2019-02-10
            • 2016-12-08
            • 1970-01-01
            • 2012-05-16
            • 2021-02-04
            • 2017-03-22
            • 1970-01-01
            相关资源
            最近更新 更多