当前位置: 首页 > 知识库问答 >
问题:

更改数组[duplicate]的值时遇到非法表达式开始错误

宗政坚白
2023-03-14

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[]中的一个Tiles)。它告诉我第一个‘{’花括号是不合法的表达式开头。

特别奇怪的是,我可以在它之前声明一个测试数组,这样编译器就不会出现任何错误:

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?

}

测试块不会遇到任何错误,所以我知道这不是一个松散的分号的问题。我真的搞不清这两种说法有什么区别。我已经声明了adj是一个Tiles数组(根据Tile类)。我将变量t声明为方法的参数数组中正在处理的每个瓦片。

我尝试过使函数不是静态的,定义了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

共有1个答案

应俭
2023-03-14

声明变量时只能单独使用数组初始值设定项语法。在本例中,您将在赋值表达式中使用它来赋值现有变量,因此需要使用数组创建表达式:

t.adj = new Tile[] { arr[i] };
 类似资料:
  • 我不明白第77行不能从这个开始,但我用“public String showTrack()”开始了类似的内容。 这是我当前的代码:

  • 我正在从其他框架生成一个JTabbedFrame。

  • 我基本上是在精炼、完成并尝试从java初学者参考书中编译测试代码。目标是创建一个猜测游戏,其中目标位于3个连续的单元中(我在阵列中保留位置),用户猜测单元号以逐个单元摧毁目标单元。 我在这里查看了六篇关于同一个错误的帖子,但我不知道出了什么问题。 这是我的错误: 我的代码是:

  • 为什么我会得到:非法的表达式开始-公共静态int noOfLetters(String str){error?我如何修复它?

  • 喂!我开始学习编程,并从一个奇怪的计算器的方式开始(我知道它的奇怪我是如何做的)。但在这段小代码中,我遇到了Java的一个问题:表达式的非法开始是因为“if(numberTest.equals(+))”,但当我输入“if(numberTest==/)”时,也会出现一个错误。有没有帮助解决这个问题,因为我没有找到任何东西,不知道该搜索什么?(:祝你们今天愉快!保重!)

  • 问题内容: 我基本上是在完善,完成并尝试从Java初学者的参考书中编译测试代码。目的是创建一个猜谜游戏,其中目标位于3个连续的单元格中(我将位置保持在数组中),而用户则猜测该单元格的编号。逐个摧毁目标细胞。 我在这里检查了六则关于同一错误的帖子,但我无法弄清楚出了什么问题。 这是我的错误: 我的代码是: 问题答案: 方法只能声明局部变量。这就是为什么当您尝试将其声明为public时,编译器会报告错