、编一个程序,当输入一个分数时输出对应的等级;当输入等级时输出对应的 分数。用 switch 语句处理。大致结构如下: import java.util.Scanner; public class Grade_Score{ public static void main(String[] args){ …… System.out.println("1、输入等级输出分数"); System.out.println("2、输入分数输出等级"); System.out.println("请选择菜单号:"); int choice=sc.nextInt(); switch(choice) { case 1: ……..// 输入成绩等级,输出相应分数的程序段 case 2: ……// 输入成绩分数,输出相应等级程序段 default: System.out.println ("选择错!"); } ……. 分数和等级定义如下: [90~100] 分,A [80 ~90 ) 分,B [60~80 ) 分, C [ 0~60 ) 分, D
时间: 2025-07-15 10:38:41 浏览: 6
<think>好的,我现在需要解决用户的问题:编写一个Java程序,使用switch语句实现分数和等级之间的双向转换。当输入分数时输出对应的等级,输入等级时输出对应的分数。用户还提供了一个大致的代码结构,我需要在这个基础上完善。
首先,我要明确需求。程序需要有两个功能选项,用户选择1时输入等级输出分数,选择2时输入分数输出等级。分数和等级的对应关系是:
- [90,100]:A
- [80,90):B
- [60,80):C
- [0,60):D
接下来,我需要考虑如何用switch语句处理这两个case。对于case 1,用户输入等级(比如A),程序需要输出对应的分数范围。这里可能需要处理字符串输入,所以要注意使用Scanner的next()方法读取字符串,然后判断等级,输出对应的分数段。
对于case 2,用户输入分数,需要判断属于哪个等级。这里需要注意的是分数是整数还是浮点数?根据题目中的例子,比如[80~90),可能是指整数,所以可以读取整数,然后使用if-else判断区间,但用户希望用switch语句处理。然而,switch在Java中不支持范围判断,所以可能需要将分数除以10,转换为case来处理。例如,分数90-100对应除以10后是9或10,得到A;80-89对应8,得到B;60-79对应6或7,得到C;0-59对应其他情况,得到D。但要注意处理边界值,比如90是否属于A,这里题目明确[90,100]是A,所以90是包含在内的。所以当分数为90时,除以10是9,属于case 9或10。
但这里有个问题,case 2的处理如果用switch,可能需要将分数转换为十位数,比如:
int score = sc.nextInt();
int ten = score / 10;
switch(ten) {
case 10:
case 9: System.out.println("A"); break;
case 8: System.out.println("B"); break;
case 7:
case 6: System.out.println("C"); break;
default:
if (score >=0 && score <60) {
System.out.println("D");
} else {
System.out.println("输入错误");
}
}
但这里需要注意,当score是100时,ten是10,属于A。而如果是负数的话,需要处理错误。但题目中的分数范围是0到100,所以可能需要先判断输入是否有效。
不过用户提供的代码结构中的case 2部分可能需要用switch,但传统的switch处理范围比较麻烦,所以可能需要结合if-else。不过用户特别要求用switch语句处理,所以可能需要用上述方法。
对于case 1,输入等级,比如A,B等,这里需要用switch处理字符,比如:
String grade = sc.next();
switch(grade) {
case "A": System.out.println("90~100"); break;
case "B": System.out.println("80~89"); break;
case "C": System.out.println("60~79"); break;
case "D": System.out.println("0~59"); break;
default: System.out.println("输入错误");
}
但要注意,题目中的等级对应的分数区间,比如B是[80,90),即80到89分,所以输出应该是80~89。而A是90到100,所以输出90~100。
现在需要将这些逻辑整合到用户提供的代码框架中。用户提供的代码结构中有两个case,case 1和case 2,分别处理等级到分数和分数到等级。
需要注意的问题:
1. 输入等级时,用户可能输入小写字母,比如a,是否需要转换?题目中没有说明,可能假设用户输入大写,所以程序中需要处理或者提示。但根据题目示例,应该要求用户输入大写,否则会报错。或者程序中将输入转换为大写,比如使用grade.toUpperCase(),但Java中字符串比较是区分大小写的,所以如果用户输入小写,就会不匹配。所以可能需要先转换,或者在case中处理所有情况。比如:
String grade = sc.next().toUpperCase();
switch(grade) { ... }
这样无论用户输入大小写,都能处理。
但原题中用户可能没有考虑这一点,所以是否需要处理?可能需要根据用户需求,但题目中没有说明,所以可能按照原题中的示例,假设用户输入正确的等级。
2. 处理分数时,输入是否为整数?题目中的例子都是整数范围,所以可能读取整数。如果用户输入小数,比如85.5,程序会报错,因为用的是nextInt()。所以需要明确输入分数是整数。
接下来,编写代码:
在case 1中,读取等级,然后输出分数范围;
在case 2中,读取分数,然后判断等级,这里需要用switch,将分数转换为十位数,但需要注意:
分数为100时,ten=10,属于A;
分数90-99,ten=9或10(但100的情况已经被处理),所以case 9和10都输出A;
分数80-89,ten=8,B;
分数60-79,ten=6或7,C;
分数0-59,ten=0到5,或者其他情况,比如负数,需要处理错误。
但根据题目,分数范围是0到100,所以需要先判断输入是否在0-100之间,否则输出错误。
所以case 2的处理逻辑可能是:
输入分数,如果不在0-100,输出错误;
否则,用switch处理十位数:
int score = sc.nextInt();
if (score <0 || score >100) {
System.out.println("输入错误");
} else {
int ten = score /10;
switch(ten) {
case 10:
case 9: System.out.println("A"); break;
case 8: System.out.println("B"); break;
case 7:
case 6: System.out.println("C"); break;
default:
if (score >=0) {
System.out.println("D");
} else {
System.out.println("输入错误");
}
}
}
但是这里,当ten是5或以下时,比如59,ten=5,进入default,此时判断score>=0,所以输出D。负数已经被前面的if过滤了。
现在将整个代码整合:
import java.util.Scanner;
public class Grade_Score {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("1、输入等级输出分数");
System.out.println("2、输入分数输出等级");
System.out.println("请选择菜单号:");
int choice = sc.nextInt();
switch(choice) {
case 1:
System.out.println("请输入等级(A/B/C/D):");
String grade = sc.next().toUpperCase(); // 转换为大写,处理小写输入
switch(grade) {
case "A":
System.out.println("90~100");
break;
case "B":
System.out.println("80~89");
break;
case "C":
System.out.println("60~79");
break;
case "D":
System.out.println("0~59");
break;
default:
System.out.println("输入错误!等级只能是A/B/C/D");
}
break;
case 2:
System.out.println("请输入分数(0-100):");
int score = sc.nextInt();
if (score <0 || score >100) {
System.out.println("输入错误!分数必须在0-100之间");
} else {
int ten = score /10;
switch(ten) {
case 10:
case 9:
System.out.println("A");
break;
case 8:
System.out.println("B");
break;
case 7:
case 6:
System.out.println("C");
break;
default: // 0-5
System.out.println("D");
}
}
break;
default:
System.out.println("选择错误!");
}
sc.close();
}
}
这样处理的话,case 1中允许用户输入大小写的等级,转换为大写后匹配;case 2中处理分数,先检查范围,然后用十位数来判断等级。
需要注意的问题:
- 在case 1中,输入等级时,如果用户输入的是多个字符或者其他字符,程序会提示错误。
- 在case 2中,分数的处理是否正确,例如:
输入90,ten=9,属于A;
输入89,ten=8,属于B;
输入79,ten=7,属于C;
输入59,ten=5,进入default,输出D;
输入60,ten=6,输出C;
输入80,ten=8,输出B;
输入0,ten=0,输出D;
这些情况都符合题目要求。
现在,确认是否满足用户的所有要求,包括使用switch语句处理,结构正确,语法正确。</think>以下是实现分数与等级双向转换的Java程序,使用switch语句处理选择逻辑:
```java
import java.util.Scanner;
public class Grade_Score {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("1、输入等级输出分数");
System.out.println("2、输入分数输出等级");
System.out.print("请选择菜单号:");
int choice = sc.nextInt();
switch (choice) {
case 1:
System.out.print("请输入等级(A/B/C/D):");
String grade = sc.next().toUpperCase();
switch (grade) {
case "A" -> System.out.println("对应分数范围:90~100");
case "B" -> System.out.println("对应分数范围:80~89");
case "C" -> System.out.println("对应分数范围:60~79");
case "D" -> System.out.println("对应分数范围:0~59");
default -> System.out.println("等级输入错误!");
}
break;
case 2:
System.out.print("请输入分数(0-100):");
int score = sc.nextInt();
if (score < 0 || score > 100) {
System.out.println("分数输入错误!");
} else {
switch (score / 10) {
case 10, 9 -> System.out.println("对应等级:A");
case 8 -> System.out.println("对应等级:B");
case 7, 6 -> System.out.println("对应等级:C");
default -> System.out.println("对应等级:D");
}
}
break;
default:
System.out.println("选择错误!");
}
sc.close();
}
}
```
### 程序说明
1. **菜单选择**
- 用户输入`1`选择「等级转分数」模式
- 用户输入`2`选择「分数转等级」模式
- 其他输入会提示「选择错误」
2. **等级转分数逻辑**
- 输入等级(A/B/C/D),**不区分大小写**
- 通过嵌套switch语句匹配对应分数范围
- 示例:输入`B`会输出`80~89`
3. **分数转等级逻辑**
- 输入0-100之间的整数
- 通过`score/10`将分数转换为十位数
- 使用switch语句匹配区间:
- `90-100` → `A`
- `80-89` → `B`
- `60-79` → `C`
- `0-59` → `D`
### 运行示例
```
1、输入等级输出分数
2、输入分数输出等级
请选择菜单号:1
请输入等级(A/B/C/D):b
对应分数范围:80~89
1、输入等级输出分数
2、输入分数输出等级
请选择菜单号:2
请输入分数(0-100):85
对应等级:B
```
阅读全文
相关推荐


















