用java帮我优化下面代码Scanner input = new Scanner(System.in); System.out.println("请输入学生姓名"); String name = input.next(); int number = 0;//录入的成绩 int sum = 0;// 定义变量sum存储总成绩 for (int i = 1; i <= 5; i++) { System.out.print("请输入第" + i + "门课成绩;"); // 判断输入是否合法 while (true) { Scanner sc = new Scanner(System.in); if (sc.hasNextInt()) { number = sc.nextInt(); if (number > 0) { break; } else { System.out.println("输入有误请重新输入"); } } else { System.out.println("输入有误请重新输入"); } }sum+=number; }double sum_1=sum/5; System.out.println(name+"的平均分是"+sum_1); input.close();
时间: 2023-06-19 07:08:53 浏览: 90
可以考虑以下优化:
1. 将多余的Scanner对象去掉,只使用一个Scanner对象即可。
2. 将输入成绩的代码封装成一个方法,减少代码重复。
3. 将输入的学生姓名和成绩放入一个Map中,方便后续处理。
4. 使用try-with-resources语句自动关闭Scanner对象。
优化后的代码如下:
```java
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try (Scanner input = new Scanner(System.in)) {
Map<String, Double> scores = new HashMap<>();
System.out.println("请输入学生姓名");
String name = input.next();
double sum = 0;// 定义变量sum存储总成绩
for (int i = 1; i <= 5; i++) {
int number = inputScore(input, i);// 输入成绩
sum += number;
}
double average = sum / 5;
scores.put(name, average);// 存储成绩
System.out.println(name + "的平均分是" + average);
System.out.println(scores);// 输出成绩
}
}
private static int inputScore(Scanner input, int i) {
int number;
while (true) {
System.out.print("请输入第" + i + "门课成绩:");
if (input.hasNextInt()) {
number = input.nextInt();
if (number > 0) {
break;
} else {
System.out.println("输入有误请重新输入");
}
} else {
System.out.println("输入有误请重新输入");
input.next();// 清除非数字输入
}
}
return number;
}
}
```
阅读全文