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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:14:12