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

Java用Switch实现宝可梦特性查询 非数字输入报错如何处理

问题解决实现

你的代码存在两个核心问题:

  • 使用scanner.nextInt()接收输入,当输入内容无法转为int类型时会直接抛出InputMismatchException异常终止运行
  • switch判断的是int类型的数字,自然无法匹配字符串格式的特性名

Java 7及以上版本已经支持switch判断String类型参数,我们可以把输入统一按字符串读取,同时适配数字输入和特性名输入两种场景,修改后的完整代码如下:

package pokemonAbility;

import java.util.Scanner;

public class PokemonAbility {

    public static void main(String[] args) {
        System.out.println("请输入宝可梦特性(可输入对应数字或特性英文名):");
        Scanner scanner = new Scanner(System.in);
        // 统一读取为字符串,避免非数字输入报错,trim()用来去除输入首尾的多余空格
        String input = scanner.next().trim();
        String abilityDesc;

        switch (input) {
            // 同时适配数字输入和特性名输入的场景
            case "1":
            case "Chlorophyll":
                abilityDesc = "叶绿素:大晴天天气下宝可梦速度属性提升";
                break;
            case "2":
            case "Guts":
                abilityDesc = "毅力:宝可梦处于异常状态时,攻击属性提升";
                break;
            case "3":
            case "Cacophony":
                abilityDesc = "隔音:宝可梦免疫所有音波类招式攻击";
                break;
            case "4":
            case "Damp":
                abilityDesc = "潮湿:阻止场上所有宝可梦使用自爆、大爆炸招式";
                break;
            case "5":
            case "Drought":
                abilityDesc = "日照:宝可梦进入对战时触发大晴天天气";
                break;
            default:
                abilityDesc = "输入错误:不存在对应的宝可梦特性";
                break;
        }
        // 统一输出结果
        System.out.println(abilityDesc);
        // 关闭扫描器释放资源
        scanner.close();
    }
}

如果你需要支持大小写不敏感的匹配,只需要把读取输入的代码改成String input = scanner.next().trim().toLowerCase();,同时把所有case的特性名改成全小写即可,比如case "chlorophyll",这样用户输入大写、混合大小写的特性名也能正确识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:39:03