题目描述
每门课的成绩分为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 input=new Scanner(System.in);
double sum=0;
int count=0;
boolean n;
while(input.hasNext()){
String str=input.nextLine();
char ch=str.charAt(0);
n = true;
if(ch == 'A'||ch == 'B'||ch == 'C'||ch == 'D'||ch == 'F'){
n = false;
switch(ch){
case 'A':sum+=4;
break;
case 'B':sum+=3;
break;
case 'C':sum+=2;
break;
case 'D':sum+=1;
break;
default :sum=+0;
break;
}
count++;
}
else{
break;
}
System.out.printf(n?"Unknown\n":"%.2f\n",sum/count);
}
}
}
但计算平均值需要进行循环
用正则表达式来实现最方便,不用循环
http://blog.csdn.net/imwangjiping/article/details/17202049
http://bbs.bccn.net/thread-427806-1-1.html
@Test
public void test(){
//使用HashMap保存成绩对应的分数
Map<String,Integer> scoreMap =
new HashMap<String,Integer>();
scoreMap.put("A", 4);
scoreMap.put("B", 3);
scoreMap.put("C", 2);
scoreMap.put("D", 1);
scoreMap.put("F", 0);
Scanner scan = new Scanner(System.in);
System.out.print("请输入成绩:");
label1:
while(scan.hasNext()){
String inputStr = scan.nextLine();
String reg = "[A-F| ]+";
if(inputStr == null || !inputStr.matches(reg)){
System.out.println("Unknown");
System.out.print("请输入成绩:");
continue;
}
String[] inputStrArray = inputStr.split(" ");
if(inputStrArray.length <= 0){
System.out.println("Unknown");
System.out.print("请输入成绩:");
continue;
}
double sum = 0;
for(String str : inputStrArray){
if(!scoreMap.containsKey(str)){
System.out.println("Unknown");
System.out.print("请输入成绩:");
//继续label1对应的循环
continue label1;
}
sum += scoreMap.get(str);
}
BigDecimal avg = new BigDecimal(sum/inputStrArray.length);
System.out.println(String.format("%.2f", avg));
System.out.print("请输入成绩:");
}
}
楼主看看这样实现怎么样,可以自己再简化一下
嗯。推荐用正则表达式来对输入做一个检测;然后再做后续计算;
说实在,我并不同意这里说用正则表达式的做法,因为你是初学者,正则表达式的使用不复杂,你很容易就可以学习到。
其实,对于你的题目,理论上用一个数组最简单,你的检查还是必要的
int[] values = new int[]{4, 3, 2, 1, 0, 0},要计算的话可以使用
values[(int)(ch - 'A')]去避免switch语句,这个在Code Complete这本书里提到,叫search table