在for循环中,我试图更改我的“ Tile”类之一的数组变量的内容。我不断出现非法的表达错误开始,而且我终生无法找出问题所在。
首先,我将向您展示我的课程和for循环,所有这些地方都出了问题。
class Tile {
int value;
int pos;
Tile[] adj;
public Tile(int value, int pos) {
this.value = value;
this.pos = pos;
}
}
Run Code Online (Sandbox Code Playgroud)
和有问题的for循环:
public static void update(Tile[] arr) {
for(int i = 0; i < arr.length; i ++) {
Tile t = arr[i];
t.pos = i + 1;
if(i == 0)
t.adj = {arr[i]};
}
}
Run Code Online (Sandbox Code Playgroud)
因此,对于每个Tile,我都有一个名为adj的数组,但编译器不允许我定义t.adj(其中t是Tiles的arr []中的Tile)。告诉我第一个'{'大括号是该表达式的非法开头。
尤其奇怪的是,我可以在测试数组之前声明一个测试数组,以免编译器出现任何错误:
if(i == 0) {
Tile[] testTile = {arr[i]};
t.adj = {arr[i]}; //compiler should know that this is an
array of tiles... but it doesn't?
}
Run Code Online (Sandbox Code Playgroud)
testTile不会遇到任何错误,因此我知道这与散号无关。关于这两个语句之间的区别,我真的感到困惑。我已经声明adj是Tiles的数组(根据Class Tile)。我将变量t声明为方法的参数数组中正在处理的每个Tile。
我尝试过使函数不是静态的,为adj []数组定义了默认大小,但是没有什么可以使编译器配合使用。我什至尝试设置t.adj = 5; 但是我得到这个错误:
Main.java:105: error: incompatible types: int cannot be converted to
Tile[]
t.adj = 5;
Run Code Online (Sandbox Code Playgroud)
这向我证明了编译器将t.adj识别为Tile []类型。
我打破了什么神秘的Java规则,那就是不允许编译器接受我编写的内容???
Main.java:105: error: illegal start of expression
t.adj = {arr[i]};
^
Main.java:105: error: not a statement
t.adj = {arr[i]};
^
Main.java:105: error: ';' expected
t.adj = {arr[i]};
^
Main.java:112: error: class, interface, or enum expected
Run Code Online (Sandbox Code Playgroud)
声明变量时,只能单独使用数组初始化程序语法。在这种情况下,您将在现有变量的赋值表达式中使用它,因此需要使用数组创建表达式:
t.adj = new Tile[] { arr[i] };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |