提交代码的慕课网邮箱是什么,求告知

求大神指点能在哪些部分精简,还有面向对象思想有哪些不足,类和方法的分配是否合理

package 简易扑克牌;

public class Attribute{
	private String value;//点数
	private String color;//花色
	
	public Attribute(String value,String color){//承载并初始化一张扑克牌
		this.value=value;
		this.color=color;
	}
	
	public boolean equals(Attribute att) {//判断两张扑克牌是否相同
		if(att==null)return false;
		if(att==this)return true;
		if(att instanceof Attribute)
			return (att.value).equals(this.value)&&(att.color).equals(this.color);
		return false;
	}
	
	public String getValue() {
		return value;
	}
	public String getColor() {
		return color;
	}
}


package 简易扑克牌;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class WanJia {
	private String ID;//玩家id
	private String Name;//玩家姓名
	private List<Attribute> shouPai;
	private Scanner input=new Scanner(System.in);
	
	public WanJia(){//创建并初始化玩家
		System.out.print("ID:");
		this.ID=input.next();
		System.out.print("Name:");
		this.Name=input.next();
		this.shouPai=new ArrayList<Attribute>();
	}
	
	public List<Attribute> getShouPai() {
		return shouPai;
	}
	public void setShouPai(List<Attribute> shouPai) {
		this.shouPai = shouPai;
	}
	
	public String getID() {
		return ID;
	}
	public String getName() {
		return Name;
	}

}


package 简易扑克牌;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

public class PuKePai implements Comparator<Attribute>{
	final String[] values={"1","2","3","4","5","6","7","8","9","10","J","Q","K"};//一副扑克牌的所有点数
	final String[] colors={"方块","梅花","红桃","黑桃"};//一副扑克牌的所有花色
	private List<Attribute> pukepai;//承载一副扑克牌
	private Random random=new Random();//创建随机数
	
	public PuKePai(){//创建并初始化一副扑克牌
		this.pukepai=new ArrayList<Attribute>();
		for(int i=0;i<values.length;i++){
			for(int j=0;j<colors.length;j++){
				Attribute att=new Attribute(values[i],colors[j]);
		    	this.pukepai.add(att);
			}
		}
	}
	
	public void showAll(){//输出整副扑克牌
		int count=0;
		for(int i=0;i<this.pukepai.size();i++){
			System.out.print(this.pukepai.get(i).getColor()+this.pukepai.get(i).getValue());
			count++;
			if(count==4){
				System.out.print("\t");
			}else if(count==8){
				System.out.println();
				count=0;
			}else{
				System.out.print(" ");
			}
		}
		System.out.println();
	}	
	
	
	
	public void XiPai(){//洗牌,返回洗完后的扑克牌
		List<Attribute> npkp=new ArrayList<Attribute>();
		if(this.pukepai!=null){
			while(this.pukepai.size()!=0){
				int i=random.nextInt(this.pukepai.size());
				if(!npkp.contains(this.pukepai.get(i))){
			    	npkp.add(this.pukepai.get(i));
			    	this.pukepai.remove(i);
				}
			}
		}else{
			System.out.println("该扑克牌尚未进行初始化");
		}
		this.pukepai=npkp;
	}
	
	public List<Attribute> FaPai(int num){//发牌,返回发手牌
		List<Attribute> npkp=new ArrayList<Attribute>();
		if(num>0||num<=52/num){
			for(int j=0;j<num;j++){
				int i=random.nextInt(this.pukepai.size());
				npkp.add(this.pukepai.get(i));
				this.pukepai.remove(i);
			}
		}else{
			System.out.println("输入的手牌数量应该介于0-52");
		}
		return npkp;
	}
	
	@Override
	public int compare(Attribute a1, Attribute a2) {//重写比较规则
		PuKePai pk=new PuKePai();
		for(int i=0;i<pk.getPukepai().size();i++){
			if(a1.equals(pk.getPukepai().get(i)))return -1;
			if(a2.equals(pk.getPukepai().get(i)))return 1;
		}
		return 0;
	}
	
	public void setPukepai(List<Attribute> pukepai) {
		this.pukepai = pukepai;
	}
	public List<Attribute> getPukepai() {
		return pukepai;
	}
	
}


package 简易扑克牌;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Test {
	private static Scanner input=new Scanner(System.in);//输入流
	public static void main(String args[]){
		int IF=0;//是否进入游戏
		
		System.out.println("-----------------欢迎来到简易扑克牌游戏-----------------");
		System.out.println("操作指南:\t1-进入游戏\t0-退出");
		System.out.print("请输入您的选择:");
		try{
	    	IF=input.nextInt();
		}catch(Exception e){
			System.out.println("命令错误,请输入数字命令:");
			Scanner input=new Scanner(System.in);
		}
		
		while(IF!=0){//IF!=0,则进入游戏
			System.out.println("-----------------游戏开始-----------------\n");
			System.out.println("------------正在创建扑克牌------------\n");//创建并初始化扑克牌
			PuKePai puke=new PuKePai();
			puke.showAll();
			System.out.println("------------创建扑克牌成功------------\n");
			
			
			System.out.print("请输入要创建的玩家数量:");//创建并初始化玩家
			int numWJ=input.nextInt();//玩家数量
			WanJia[] wjs=new WanJia[numWJ];//承载多个玩家
			System.out.println("------------正在创建玩家信息------------\n");
			for(int i=0;i<numWJ;i++){
		    	System.out.println("------------正在创建玩家"+(i+1)+"------------\n");
		    	wjs[i]=new WanJia();
		    	System.out.println("玩家"+(i+1)+"创建成功----ID:"+wjs[i].getID()+"\tName:"+wjs[i].getName());
			}
			System.out.println("------------所有玩家创建完毕------------\n");
			
			
			System.out.println("------------开始洗牌------------\n");//洗牌并输出
			puke.XiPai();
			puke.showAll();
			System.out.println("------------洗牌完毕------------\n");
			
			
			System.out.print("请输入每个玩家的手牌数量:");//发牌并对玩家手牌排序后输出
			int numSP=input.nextInt();
			System.out.println("------------开始发牌------------\n");
			for(int i=0;i<numWJ;i++){
				wjs[i].setShouPai(puke.FaPai(numSP));
				System.out.print("玩家"+wjs[i].getName()+"的手牌:");
				
				Collections.sort(wjs[i].getShouPai(),new PuKePai());//排序,sort通过Comparator重写compare规则
				
				for(int j=0;j<numSP;j++){
					System.out.print(wjs[i].getShouPai().get(j).getColor()+wjs[i].getShouPai().get(j).getValue());
					System.out.print(" ");
				}
				System.out.println();
			}
			System.out.println("\n------------发牌完毕------------\n");
			
			
			
			System.out.println("------------开始比较大小------------\n");//对玩家每一张手牌进行比较大小
			int[] result=new int[numWJ];
			for(int i=0;i<numSP;i++){//手牌数量控制总的比较次数
				System.out.print("正在比较第"+(i+1)+"张牌:");
				int j=0;
				int record=j;
				Attribute max=wjs[j].getShouPai().get(i);
				for(j=1;j<numWJ;j++){//玩家数量控制每张牌比较次数
					if(puke.compare(max, wjs[j].getShouPai().get(i))==-1){
						max=wjs[j].getShouPai().get(i);
						record=j;
					}
				}
				result[record]++;//记录每个玩家胜利的次数
				System.out.println("玩家"+wjs[record].getName()+"大");//输出当次比较胜利的玩家
			}
			int i=0,j=0;
			for(i=1;i<numWJ;i++){
				if(result[j]<result[i]){
					j=i;
				}
			}
			System.out.println("最后的赢家是:玩家"+wjs[j].getID()+"  "+wjs[j].getName()+",胜"+result[j]+"盘");
			IF=0;
		}
		
		
		
	}
	
}
纪无涯
浏览 1889回答 2
2回答

Miahuang

System.out.println("输入的手牌数量应该介于0-52");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java