You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从其他类读取ArrayList指定索引元素的特定属性?

问题描述

我有一个存储Rum类对象的ArrayList,Rum类包含以下属性:

  • String类型:namn、beskrivning
  • Integer类型:n、s、ö、v

我需要在其他类中通过getter方法读取ArrayList指定索引元素的n、s、ö、v属性。目前通过currentRoom = getKarta().get(roomNumber)获取目标元素(roomNumber初始为0,对应第一个元素),尝试用switch语句根据输入做逻辑判断:若当前元素的n属性值大于-1,就将该值赋值给roomNumber,但逻辑实现失败。例如,我需要读取索引0的Rum对象的n属性值(即1)。

现有代码片段

主逻辑代码

while(true){
    System.out.print("" +currentRoom);
    String sInput = input.nextLine();
    switch (sInput)
        case "n"
            if(parameter3 >0) {
                rooms´Number = parameter3;
            }else {
                System.out.println("you cant go north)}
            break;

ArrayList初始化代码

public DragonTreasure() {
    karta = new ArrayList<Rum>();
    
    // ArrayList中元素的属性顺序:namn, beskrivning, n,s,ö,v
    karta.add(new Rum("Entre", "Rummet är upplyst av några ljus som sitter på ett bord framför dig.", 1, 4, -1, -1));
    karta.add(new Rum("Död Kropp", "Du ser en död kropp på golvet.", -1, 0, 2, -1));
    karta.add(new Rum("Fackelrum", "Du ser en brinnande fackla i rummets ena hörn och känner en motbjudande stank.", -1, -1, 6, 1));
    karta.add(new Rum("Fuktigt Rum", "Du kommer in i ett fuktigt rum med vatten sipprandes längs den västra väggen.", 2, -1, 5, 4));
    karta.add(new Rum("Bergsrum", "Du kommer in i ett rymligt bergrum med en ljusstrimma sipprandes genom en spricka i den östra väggen.", 0, -1, 3, -1));
    karta.add(new Rum("Låst Rum", "Du har ingen nyckel som passar.", -1, -1, -1, 3));
    karta.add(new Rum("Utgång", "Du lämnar grottan med livet i behåll. Grattis, du förlorade inte!", -1, -1, -1, 2));
}
问题分析与修正

原代码存在几个关键错误:

  1. switch语法不完整:缺少大括号包裹case逻辑,case语句后缺少冒号
  2. 变量未定义/命名错误:parameter3未赋值,应该从currentRoom通过getter获取n属性;rooms´Number是拼写错误,应该是roomNumber
  3. 判断条件错误:应该判断值是否大于-1(而非大于0),因为初始化数据中有效房间索引是0及以上,-1代表不可通行
  4. 字符串引号未闭合:System.out.println("you cant go north)}中右引号缺失

另外,要确保Rum类已定义对应的getter方法,比如:

public class Rum {
    private String namn;
    private String beskrivning;
    private Integer n;
    private Integer s;
    private Integer ö;
    private Integer v;

    // 构造方法
    public Rum(String namn, String beskrivning, Integer n, Integer s, Integer ö, Integer v) {
        this.namn = namn;
        this.beskrivning = beskrivning;
        this.n = n;
        this.s = s;
        this.ö = ö;
        this.v = v;
    }

    // getter方法
    public Integer getN() {
        return n;
    }

    public Integer getS() {
        return s;
    }

    public Integer getÖ() {
        return ö;
    }

    public Integer getV() {
        return v;
    }

    // 可选:重写toString方法,方便打印房间信息
    @Override
    public String toString() {
        return "\n当前房间:" + namn + "\n描述:" + beskrivning + "\n可移动方向:" +
                (n != -1 ? "北(n) " : "") +
                (s != -1 ? "南(s) " : "") +
                (ö != -1 ? "东(ö) " : "") +
                (v != -1 ? "西(v) " : "") + "\n请输入方向:";
    }
}

修正后的主逻辑代码:

import java.util.Scanner;

public class GameLogic {
    private DragonTreasure dragonTreasure;
    private int roomNumber;
    private Rum currentRoom;
    private Scanner input;

    public GameLogic() {
        dragonTreasure = new DragonTreasure();
        roomNumber = 0;
        currentRoom = dragonTreasure.getKarta().get(roomNumber); // 假设DragonTreasure有getKarta()方法返回ArrayList
        input = new Scanner(System.in);
    }

    public void startGame() {
        while (true) {
            System.out.print(currentRoom);
            String sInput = input.nextLine().trim().toLowerCase();

            switch (sInput) {
                case "n":
                    Integer northRoom = currentRoom.getN();
                    if (northRoom > -1) {
                        roomNumber = northRoom;
                        currentRoom = dragonTreasure.getKarta().get(roomNumber);
                    } else {
                        System.out.println("你不能往北走!");
                    }
                    break;
                case "s":
                    Integer southRoom = currentRoom.getS();
                    if (southRoom > -1) {
                        roomNumber = southRoom;
                        currentRoom = dragonTreasure.getKarta().get(roomNumber);
                    } else {
                        System.out.println("你不能往南走!");
                    }
                    break;
                case "ö":
                    Integer eastRoom = currentRoom.getÖ();
                    if (eastRoom > -1) {
                        roomNumber = eastRoom;
                        currentRoom = dragonTreasure.getKarta().get(roomNumber);
                    } else {
                        System.out.println("你不能往东走!");
                    }
                    break;
                case "v":
                    Integer westRoom = currentRoom.getV();
                    if (westRoom > -1) {
                        roomNumber = westRoom;
                        currentRoom = dragonTreasure.getKarta().get(roomNumber);
                    } else {
                        System.out.println("你不能往西走!");
                    }
                    break;
                case "quit":
                    System.out.println("游戏结束!");
                    input.close();
                    return;
                default:
                    System.out.println("无效输入,请输入n/s/ö/v/quit");
            }

            // 到达出口时结束游戏
            if (currentRoom.getNamn().equals("Utgång")) {
                System.out.println(currentRoom.getBeskrivning());
                input.close();
                break;
            }
        }
    }
}

同时确保DragonTreasure类有getKarta()方法:

import java.util.ArrayList;

public class DragonTreasure {
    private ArrayList<Rum> karta;

    public DragonTreasure() {
        karta = new ArrayList<Rum>();
        karta.add(new Rum("Entre", "Rummet är upplyst av några ljus som sitter på ett bord framför dig.", 1, 4, -1, -1));
        karta.add(new Rum("Död Kropp", "Du ser en död kropp på golvet.", -1, 0, 2, -1));
        karta.add(new Rum("Fackelrum", "Du ser en brinnande fackla i rummets ena hörn och känner en motbjudande stank.", -1, -1, 6, 1));
        karta.add(new Rum("Fuktigt Rum", "Du kommer in i ett fuktigt rum med vatten sipprandes längs den västra väggen.", 2, -1, 5, 4));
        karta.add(new Rum("Bergsrum", "Du kommer in i ett rymligt bergrum med en ljusstrimma sipprandes genom en spricka i den östra väggen.", 0, -1, 3, -1));
        karta.add(new Rum("Låst Rum", "Du har ingen nyckel som passar.", -1, -1, -1, 3));
        karta.add(new Rum("Utgång", "Du lämnar grottan med livet i behåll. Grattis, du förlorade inte!", -1, -1, -1, 2));
    }

    public ArrayList<Rum> getKarta() {
        return karta;
    }
}

内容的提问来源于stack exchange,提问作者onataj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:01:42