【问题标题】:Can't assign values to a 2d boolean array [duplicate]无法将值分配给二维布尔数组 [重复]
【发布时间】:2017-02-20 20:55:18
【问题描述】:

我基本上只是从 java 开始,并且正在努力学习一个非常基本的 porgram。 我有一个二维布尔数组,我想随机填充它......你不会猜到......布尔值!这是我现在的方法,但运行后似乎数组只填充了'false'。

public static void randBoard()  {
    for(boolean[] item : board) {
        for(boolean square : item)  {
            square = Math.random() < .5;
        }
    }
}

【问题讨论】:

  • 您只是在foreach 循环中设置局部变量square。使用迭代循环for(i=0;i&lt;item.length;i++) {.... item[i] = ... } 访问数组并更改数组本身的值。一切都是false 的原因是它是boolean 的默认值,并且由于您从未设置array 值,因此您将只剩下所有具有默认值的东西。

标签: java arrays random boolean assign


【解决方案1】:

你的意思是可能是这样的吗?

int d1 = 5;
int d2 = 5;
boolean[][] board = new boolean[d1][d2];
for(int i=0; i<d1; i++) {
  for(int j=0; j<d2; j++) {
    boolean square = Math.random() < .5;
    board[i][j] = square;
    System.out.print("[" + board[i][j] + "]");
  }
  System.out.println();
}

【讨论】:

    【解决方案2】:

    正如 Kevin Esche 所说:如果您为每个循环遍历布尔值,您将获得值对象,但您希望将其设置为引用。这意味着必须设置列表中的位置。

    它应该与以下代码一起使用:

    public static void randBoard()  {
       Random random = new Random();
       for(int i =0; i<board.length;i++) {
           boolean[] item = board[i];
           for(int j= 0;j<item.length;j++)  {
               item[j]= random.nextBoolean();
           }
        }
     }
    

    【讨论】:

    • 注意,对于外层循环可以使用for each循环;它只是内部循环,它需要是一个“普通的旧”for循环才能更新元素。
    • 不知道for each loops 没有提供参考,谢谢帮助。
    • @UncraftedName 小写的变量类型(int、float、long、boolean 等)是基本类型。在这些情况下,它们会被复制。第一个大写的变量(Integer、Float、Long、Boolean、大多数类等)是对象,将通过引用传递。这意味着如果您使用布尔值而不是布尔值,您的代码也可以工作!
    猜你喜欢
    • 2019-02-10
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2015-06-20
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    相关资源
    最近更新 更多