gpt4 book ai didi

java - 更改数组值时遇到表达式非法开始错误

转载 作者:行者123 更新时间:2023-12-01 16:43:44 25 4
gpt4 key购买 nike

在 for 循环中,我试图更改我的“Tile”类之一的数组变量的内容。我不断收到非法开始表达式错误,而且我一辈子都无法弄清楚出了什么问题。

首先,我将向您展示我的类和 for 循环,这一切都出了问题。

class Tile {

int value;
int pos;
Tile[] adj;

public Tile(int value, int pos) {

this.value = value;
this.pos = pos;

}
}

以及有问题的 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]};
}
}

因此,对于每个 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?

}

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;

这向我证明编译器将 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

最佳答案

您只能使用array initializer声明变量时单独使用语法。在本例中,您在现有变量的赋值表达式中使用它,因此您需要使用 array creation expression :

t.adj = new Tile[] { arr[i] };

关于java - 更改数组值时遇到表达式非法开始错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57226784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com