更改数组的值时遇到表达式的非法开头错误

ejo*_*o13 0 java arrays

在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)

Jon*_*eet 5

声明变量时,只能单独使用数组初始化程序语法。在这种情况下,您将在现有变量的赋值表达式中使用它,因此需要使用数组创建表达式

t.adj = new Tile[] { arr[i] };
Run Code Online (Sandbox Code Playgroud)