1. 程式人生 > >使用純java 黃金點遊戲

使用純java 黃金點遊戲

pri art name 自己 rem 輸入 println 入參 cnblogs

  最近自己使用純java寫的黃金點遊戲,寫的不是很好,希望各位度偶倒指點。本來想使用swing來做幾個按鈕的,但是對這個確實不是很懂,還是放棄了,采用了控制臺輸入的方式。主要是

使用hashmap來存儲參加遊戲的name和每次輸入的數據。

代碼如下:

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);
	}
}

}

  

使用純java 黃金點遊戲