左侧必须是变量(ArrayList和Array)

时间:2015-06-28 10:52:49

标签: java arrays variables arraylist

我在ArrayList和Array之间有点困惑,我理解变量是什么,但我不明白为什么我不能将ArrayList转换为数组并具有相同的效果。

我使用ArrayList时的这段代码

import java.util.Objects;

import com.google.gson.Gson;
import com.google.gson.JsonObject;


public final class NpcDefinitionLoader extends JsonLoader {

    /**
     * Creates a new {@link NpcDefinitionLoader}.
     */
    public NpcDefinitionLoader() {
        super(DefinitionEditor.fileChooser.getSelectedFile().getAbsolutePath());
    }

    @Override
    public void load(JsonObject reader, Gson builder) {
        int index = reader.get("id").getAsInt();
        String name = Objects.requireNonNull(reader.get("name").getAsString());
        String description = Objects.requireNonNull(reader.get("examine").getAsString());
        int combatLevel = reader.get("combat").getAsInt();
        int size = reader.get("size").getAsInt();
        boolean attackable = reader.get("attackable").getAsBoolean();
        boolean aggressive = reader.get("aggressive").getAsBoolean();
        boolean retreats = reader.get("retreats").getAsBoolean();
        boolean poisonous = reader.get("poisonous").getAsBoolean();
        int respawnTime = reader.get("respawn").getAsInt();
        int maxHit = reader.get("maxHit").getAsInt();
        int hitpoints = reader.get("hitpoints").getAsInt();
        int attackSpeed = reader.get("attackSpeed").getAsInt();
        int attackAnim = reader.get("attackAnim").getAsInt();
        int defenceAnim = reader.get("defenceAnim").getAsInt();
        int deathAnim = reader.get("deathAnim").getAsInt();
        int attackBonus = reader.get("attackBonus").getAsInt();
        int meleeDefence = reader.get("defenceMelee").getAsInt();
        int rangedDefence = reader.get("defenceRange").getAsInt();
        int magicDefence = reader.get("defenceMage").getAsInt();

        NPCDefinitions.definitions.get(index) = new NPCDefinitions(index, name, description, combatLevel, size, attackable, aggressive, retreats,
            poisonous, respawnTime, maxHit, hitpoints, attackSpeed, attackAnim, defenceAnim, deathAnim, attackBonus, meleeDefence,
            rangedDefence, magicDefence);
    }
}

我在这里收到错误

NPCDefinitions.definitions.get(index) = new NPCDefinitions(index, name, description, combatLevel, size, attackable, aggressive, retreats,
        poisonous, respawnTime, maxHit, hitpoints, attackSpeed, attackAnim, defenceAnim, deathAnim, attackBonus, meleeDefence,
        rangedDefence, magicDefence);

说左侧必须是变量。当我使用像这样的数组时

NPCDefinitions.definitions[index] = new NPCDefinitions(index, name, description, combatLevel, size, attackable, aggressive, retreats,
        poisonous, respawnTime, maxHit, hitpoints, attackSpeed, attackAnim, defenceAnim, deathAnim, attackBonus, meleeDefence,
        rangedDefence, magicDefence);

代码运作完美。

我对此感到困惑,我将如何通过使用ArrayList来完成这项工作?

4 个答案:

答案 0 :(得分:1)

使用List#add代替List#get并指定运营商。

尝试:

NPCDefinitions.definitions.add(index, new NPCDefinitions(index, name, description, combatLevel, size, attackable, aggressive, retreats,
    poisonous, respawnTime, maxHit, hitpoints, attackSpeed, attackAnim, defenceAnim, deathAnim, attackBonus, meleeDefence,
    rangedDefence, magicDefence));

修改

NPCDefinitions.definitions必须在使用前定义。

ArrayList课程成员定义之前或之前的某个位置,将新definitions实例分配给NPCDefinitions.definitions = new ArrayList<>();,例如NPCDefinitions

答案 1 :(得分:0)

您应该使用ArrayList#set

NPCDefinitions.definitions.set(index, new NPCDefinitions(..))

请注意,get方法,而不是变量。

答案 2 :(得分:0)

NPCDefinitions.definitions[index]是一个变量。

NPCDefinitions.definitions.get(index)是一种方法调用,因此您无法为其分配值。

答案 3 :(得分:0)

您不会在ArrayList中添加/设置与数组中相同的值。

更改特定索引中的值:

NPCDefinitions.definitions.set(index, new NPCDefinitions(..));

这种方法的行为与数组赋值(arr[index]=)的行为最相似,因为它不会更改ArrayList的大小。但是,您应该注意,如果ArrayList&lt; = index。

的大小,此方法将失败

您只需在List的末尾添加一个新值,而不是此方法:

NPCDefinitions.definitions.add(new NPCDefinitions(..));