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
相关产品推荐
相关产品推荐

