时间限制:1.000S 空间限制:32MB
题目描述
每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。
输入描述
有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。
输出描述
每组输出结果占一行。如果输入的大写字母都在集合{A,B,C,D,F}中,则输出对应的平均绩点,结果保留两位小数。否则,输出“Unknown”。
输入示例
A B C D F
B F F C C A
D C E F
输出示例
2.00
1.83
Unknown
题解:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String line = sc.nextLine(); //初始化字符串.注意不要写成String line
double sum = 0;
int count = 0;
boolean signal = true;
String[] score = line.split(" "); //将String里的char单个字符(基本数据类型)变为数组(对象引用类型).
for(int a =0; a < score.length; a++){ //数组的length属性不带括号.ArrayList的size()才带括号
if(score[a].equals("A")){
sum += 4;
count++;
}
else if(score[a].equals("B")){
sum +=3;
count++;
}
else if(score[a].equals("C")){
sum +=2;
count++;
}
else if(score[a].equals("D")){
sum +=1;
count++;
}
else if(score[a].equals("F")){
sum +=0;
count++;
}
else{
signal = false; //跳过正常输出数值环节
System.out.println("Unknown"); //转向输出""Unknown"
break;
}
}
if(signal == true){
System.out.printf("%.2f\n",sum / count); //使用args就要用格式化输出
}
}
}
}
心得:
① 无意的拼写错误.难以发现.
在格式化输出里,将%.2f写作了&.2f导致结果乱码.这种问题人工还真不好解决.交给GPT好些.
②什么时候用属性,什么时候用方法(java自带的东西)
数组用.length, ArrayList用.length(). 注意括号的差别.
③定义数组或者字符串数组加[],定义纯String不需要写为String[]
④ == 和 .equals() :
在String 中,于"对象引用"而言 :==
比较的是引用地址
.equals()
比较的是字符串内容