Java新手求助:如何将键盘输入与ArrayList中的Spell对象关联?
解决法术名称显示问题的方案
嘿,我来帮你搞定这个问题!你现在的代码只是把输入的编号直接输出,没有根据编号从法术列表里取出对应的法术对象,所以没法显示“火球术”这种具体名称。咱们一步步改:
1. 优化法术列表的打印(可选但更高效)
你原来用增强for循环配合indexOf(s)来获取编号,其实用普通for循环直接拿索引更高效,还不会出错:
// 打印玩家的法术书,带编号 for (int i = 0; i < playerSpells.size(); i++) { Spell currentSpell = playerSpells.get(i); // 这里假设Spell类的toString()会返回法术名称,比如"火球术" System.out.println((i + 1) + ". " + currentSpell); }
注意:如果你的Spell类还没重写toString()方法,打印出来会是类似Spell@xxxxxx的内存地址,后面会说怎么处理这个~
2. 根据输入编号获取并显示法术名称
现在修改输入处理的代码,先把输入的1-based编号转换成List的0-based索引,然后取出对应的法术:
// 获取键盘输入 String keyboardInput = (String) Utilities.getInput(); try { // 把输入转成整数编号 int spellNumber = Integer.parseInt(keyboardInput); // 转换成List的索引(因为List从0开始,输入是从1开始的) int spellIndex = spellNumber - 1; // 检查编号是否合法,避免数组越界 if (spellIndex >= 0 && spellIndex < playerSpells.size()) { Spell selectedSpell = playerSpells.get(spellIndex); // 这里就会显示对应的法术名称啦 System.out.println("你选择了法术" + selectedSpell); } else { // 处理无效编号的情况 System.out.println("无效的法术编号,请输入1到" + playerSpells.size() + "之间的数字!"); } } catch (NumberFormatException e) { // 处理用户输入非数字的情况 System.out.println("请输入有效的数字编号哦!"); }
3. 确保Spell类能正确显示名称
如果你的Spell类还没重写toString()方法,一定要加上,这样打印Spell对象时才会显示法术名称:
public class Spell { // 假设你有一个存储法术名称的属性 private String spellName; // 构造方法、getter/setter等 public Spell(String spellName) { this.spellName = spellName; } // 重写toString(),返回法术名称 @Override public String toString() { return spellName; } }
另外,你原来代码里那个空的for (int i = 0; i < 5; i++) {}循环完全没用,直接删掉就好啦!
内容的提问来源于stack exchange,提问作者Sam Brooks
相关产品推荐
相关产品推荐

