zoukankan      html  css  js  c++  java
  • 结对项目——Golden Point(彭佳丽&邹宇)

    1.代码来源:

    博客园:http://www.cnblogs.com/liupeixuan/p/7586444.html

    2. Platform:Eclipse

        Language:Java

    3.具体实现流程图:

    4. Bug:出现了一个小问题,及参数定义不明确,修改了便能好运行了。

    5. Function improvement:

         代码主要实现了由用户控制有多少人参加游戏,进行多少轮,进行用户名字的录入,以及每轮比赛的比赛结果的公布。

    6. Implementation:可实现

    7.代码如下:

     
    package demo2;
     
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Scanner;
     
    public class GoldPoint {
    public static void main(String[] args){
        GoldPoint gd=new GoldPoint();
        gd.goldPoint();
    }
    public void goldPoint(){
        HashMap<String,Double> inputMap=new HashMap<String,Double>();//存入输入分数
        HashMap<String,Double> scoreMap=new HashMap<String,Double>();//存入分数
        String name="";
        Double inputScore;
        int peopleNum;//参加的人数
        int time;//进行轮数
        Double sum=0.0;
        Double aver=0.0;
        Scanner scan=new Scanner(System.in); //参数对象是系统进来的流
        System.out.println("输入参加的人数:");
        peopleNum=scan.nextInt();
        System.out.println("输入需要进行几轮:");
        time=scan.nextInt();
        for(int i=0;i<peopleNum;i++){
            System.out.println("请输入第"+(i+1)+"个参加者的姓名:");
            name=scan.next();
            System.out.println("请输入第一轮的分数:");
            inputScore=scan.nextDouble();
             inputMap.put(name, inputScore);
             scoreMap.put(name,(double) 0);//初始化scoreMap
             sum+=inputScore;
        }
        aver=sum/peopleNum*0.618;
        System.out.println("aver="+aver);
        this.findWinner(inputMap, scoreMap, aver);
        this.show(scoreMap);
        System.out.println("第一轮结束");
        for(int i=0;i<time-1;i++){
                sum=0.0;
                System.out.println("请输入第"+(i+2)+"轮的分数:");
                Iterator iter = inputMap.entrySet().iterator();
                while (iter.hasNext()) {
                    Map.Entry entry0 = (Map.Entry) iter.next();
                    String key = (String) entry0.getKey();
                    System.out.println(key+"输入第"+(i+2)+"轮分数:");
                    Double score =scan.nextDouble();
                    inputMap.put(key, score);//替换掉以前的分数
                    sum+=score;
            }
                aver=sum/peopleNum*0.618;
                System.out.println("aver="+aver);
                this.findWinner(inputMap, scoreMap, aver);
                this.show(scoreMap);
            System.out.println("第"+(i+2)+"轮结束");
        } 
    }
    //找出每次分数最接近黄金点的 和最远的 最接近的加一分 最远的减一分 其余加零分(可能有相同的)
    public void findWinner(HashMap<String,Double> inputMap,HashMap<String,Double> scoreMap,Double aver){   
        Double temp;
        Double temp0;
        List<String> latest=new ArrayList<String>();
        List<String> farthest=new ArrayList<String>();
         
        Iterator iter = inputMap.entrySet().iterator();
        Map.Entry entry = (Map.Entry) iter.next();
        Double input = (Double) entry.getValue();
        String key0 = (String) entry.getKey();
        latest.add(key0);
        farthest.add(key0);
        //iter.hasNext();
        temp0=temp=Math.abs(aver-input);
        //遍历map
        while (iter.hasNext()) {   
            entry = (Map.Entry) iter.next();
            String key = (String) entry.getKey();
            input = (Double) entry.getValue();
            Double temp1=Math.abs(aver-input);
            if(temp>temp1){//寻找最近
                temp=temp1;
                 latest.clear();
                 latest.add(key);
            }else if(temp==temp1){
                latest.add(key);
            }
            if(temp0<temp1){//寻找最远
                temp0=temp1;
                farthest.clear();
                farthest.add(key);}
            else if(temp0==temp1){
                farthest.add(key);
            }
        }
        //实现加分
        iter = scoreMap.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry entry0 = (Map.Entry) iter.next();
            String key = (String) entry0.getKey();
            Double score =(Double) entry0.getValue();
            if(this.containList(key, latest)){
                score=score+1;
                scoreMap.put(key, score);
                }
            if(this.containList(key, farthest)){
                score=score-1;
                scoreMap.put(key, score);
            }
            }
    }
    public boolean containList(String str,List<String> list){
        for(int i=0;i<list.size();i++){
            if(str.equals(list.get(i))){
                return true;
            }
        }
        return false;
    }
    public void show(HashMap<String,Double> scoreMap){
        System.out.println("得分情况:");
        Iterator iter = scoreMap.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry entry0 = (Map.Entry) iter.next();
            String key = (String) entry0.getKey();
            Double score =(Double) entry0.getValue();
            System.out.println(key+":"+score);
        }
    }
     
    }

    8. Github地址:https://github.com/judySong/judy2/blob/master/GoldPoint.java

  • 相关阅读:
    FluorineFx:基于RSO(远程共享对象)的文本聊天室
    第一个十年,我从教师转行为web程序员,下一个十年呢?
    AS3中的单件(Singleton)模式
    数据结构C#版笔记双向链表(DbLinkList)
    FluorineFx:认证与授权
    FluorineFx:视频录制及回放(Flash/AS3环境)
    数据结构C#版笔记顺序表(SeqList)
    puremvc框架之hello world!
    flex中使用swc实现更好的界面代码分离
    puremvc框架之Command
  • 原文地址:https://www.cnblogs.com/cactus20/p/7737511.html
Copyright © 2011-2022 走看看