ZxuanG
ZxuanG
采纳率0%
2014-12-31 13:52 阅读 2.0k

java初学者,求教!!!!!!!11

题目描述

每门课的成绩分为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); 
    }
}

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • devmiao devmiao 2014-12-31 15:04
  • lzp_lrp WorldMobile 2014-12-31 14:45

    但计算平均值需要进行循环

    点赞 评论 复制链接分享
  • lzp_lrp WorldMobile 2014-12-31 14:45

    用正则表达式来实现最方便,不用循环

    点赞 评论 复制链接分享
  • zhangshunjie zhangshunjie 2014-12-31 17:54
    @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("请输入成绩:");
        }
    
    }
    楼主看看这样实现怎么样,可以自己再简化一下
    
    点赞 评论 复制链接分享
  • testcs_dn 微wx笑 2015-01-01 08:14

    嗯。推荐用正则表达式来对输入做一个检测;然后再做后续计算;

    点赞 评论 复制链接分享
  • eagleyan Coursera 2015-01-01 19:29

    说实在,我并不同意这里说用正则表达式的做法,因为你是初学者,正则表达式的使用不复杂,你很容易就可以学习到。
    其实,对于你的题目,理论上用一个数组最简单,你的检查还是必要的
    int[] values = new int[]{4, 3, 2, 1, 0, 0},要计算的话可以使用
    values[(int)(ch - 'A')]去避免switch语句,这个在Code Complete这本书里提到,叫search table

    点赞 评论 复制链接分享

相关推荐