java - 在Java中: using foreach loops in constructors to initialize multidimensional array data fields

标签 java multidimensional-array datafield

所以我试图创建一个封装二维字符数组的类。特别是,我想要做的是定义默认构造函数,以便封装的二维数组包含默认字符(在本例中为“#”)。我的问题:当我尝试通过嵌套 foreach 循环系统地用默认 char 填充数组时,编译器不承认我正在使用第二个嵌套循环的初始化 char 参数 c,尽管我显然使用了赋值 c = '# '。引用 Eclipse 的话,“局部变量 c 的值没有被使用。”

相关代码如下:

public class 2DCharArr
{
 private char[][] chars;
 private byte length_x, length_y;

 public 2DCharArr()
 {
  length_x = 10; length_y = 10;
  chars = new char[length_x][length_y];
  for (char[] arr : chars)
   for (char c : arr)
    c = '#'; // Does not signal to Eclipse that c was used.
 }
}

我的 foreach 循环语法是否有问题,导致编译器无法识别我对 c 的使用?如果有人为我解决这个问题,那就太好了,因为它阻止我使用 foreach 循环创建包含多维数组的对象,尽管我觉得如果我有能力的话我应该能够做到与语言。预先感谢您的见解!

最佳答案

使用增强型 for 语句时无法赋值。您必须以传统方式迭代它们并将值分配给特定索引。

for(int i= 0; i < chars.length; i++) {
    for(int j = 0; j < chars[i].length; j++) {
        chars[i][j] = '#';
    }
}

其原因是微妙的,因为 is defined in the JLS 的增强方式:

  • 如果它是一个 Iterable,它会使用其迭代器,并将 next() 的结果绑定(bind)到您的变量。
  • 如果是数组类型,它会创建一个 for 循环,并将索引值绑定(bind)到变量。

无论哪种情况,您都无法修改传入的变量以达到任何有意义的效果,例如赋值。

关于java - 在Java中: using foreach loops in constructors to initialize multidimensional array data fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26132511/

相关文章:

java - 为什么 Spring 不能 Autowiring 一个名为环境的 bean?

java - 何时在 Java 中使用单一方法接口(interface)

c - Q排序多维数组

java - 二元运算符编译错误的错误操作数类型

c - 从文件读入二维数组

java - 单独项目中的 Google App Engine 实体未进行数据增强

Java 类和 ArrayList

mysql - MySQL 中的 VARCHAR 与 TEXT

python - 使用实际数据时间和生日以及数据字段在 django 模板中定义年龄

Java - 更改数据字段?