如何从其他类读取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)); }
问题分析与修正
原代码存在几个关键错误:
- switch语法不完整:缺少大括号包裹case逻辑,case语句后缺少冒号
- 变量未定义/命名错误:
parameter3未赋值,应该从currentRoom通过getter获取n属性;rooms´Number是拼写错误,应该是roomNumber - 判断条件错误:应该判断值是否大于-1(而非大于0),因为初始化数据中有效房间索引是0及以上,-1代表不可通行
- 字符串引号未闭合:
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
相关产品推荐
相关产品推荐

