Java新手求助:如何在switch case语句中指定数值范围?
解决Java Switch Case无法指定数值范围的问题
你当前代码的核心问题是:case 0-20会被Java编译器解析为数学运算0-20=-20,因此这个case只会匹配input等于-20的情况,完全达不到你想要的范围匹配效果。
下面提供几种可行的解决方案,适配不同Java版本:
1. Java 12+ 推荐写法:Switch表达式+范围条件
从Java 12开始,switch表达式支持when关键字添加范围判断,语法简洁直观:
int input = 75; // 替换为你的输入值 String grade = switch (input) { case int score when score >= 0 && score <= 20 -> "F"; case int score when score >= 21 && score <= 40 -> "D"; case int score when score >= 41 && score <= 60 -> "C"; case int score when score >= 61 && score <= 80 -> "B"; case int score when score >= 81 && score <= 100 -> "A"; default -> "Invalid grade"; // 处理超出0-100的非法输入 }; System.out.println("Your grade is " + grade);
2. Java 12以下版本:两种替代方案
方案A:整数分段映射(利用整数除法)
通过整数除法将分数映射为固定区间的整数,再用switch匹配:
int input = 85; // 替换为你的输入值 switch ((input - 1) / 20) { case 0: // 1-20 System.out.println("Your grade is F"); break; case 1: //21-40 System.out.println("Your grade is D"); break; case 2: //41-60 System.out.println("Your grade is C"); break; case 3: //61-80 System.out.println("Your grade is B"); break; case 4: //81-100 System.out.println("Your grade is A"); break; default: // 处理0或大于100的情况 System.out.println(input == 0 ? "Your grade is F" : "Invalid grade"); }
方案B:直接使用if-else(最易理解)
如果不需要强行用switch,if-else的写法逻辑更清晰,对新手友好:
int input = 50; // 替换为你的输入值 if (input >= 0 && input <= 20) { System.out.println("Your grade is F"); } else if (input >= 21 && input <= 40) { System.out.println("Your grade is D"); } else if (input >= 41 && input <= 60) { System.out.println("Your grade is C"); } else if (input >= 61 && input <= 80) { System.out.println("Your grade is B"); } else if (input >= 81 && input <= 100) { System.out.println("Your grade is A"); } else { System.out.println("Invalid grade"); }
内容的提问来源于stack exchange,提问作者JavaNewbieeee
相关产品推荐
相关产品推荐

