结对项目——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

posted @ 2017-10-26 16:29  风雨正好  阅读(161)  评论(0编辑  收藏  举报