为了账号安全,请及时绑定邮箱和手机立即绑定

帮忙看看我的代码哪里需要改善的地方

//Poker类
public class Poker {

	private String[] type={"方块","梅花","红桃","黑桃"};  //从小到大
	private String[] value={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};  //从小到大
	
	public String[] getType() {
		return type;
	}


	public void setType(String[] type) {
		this.type = type;
	}


	public String[] getValue() {
		return value;
	}


	public void setValue(String[] value) {
		this.value = value;
	}


	public Poker() {
		
	}	
}

//Player类
public class Player {
	private int ID;
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getID() {
		return ID;
	}

	public void setID(int iD) {
		ID = iD;
	}
}

//主程序
import java.util.Collections;
import java.util.InputMismatchException;
import java.util.LinkedList;
import java.util.Scanner;

public class PokerList {
	/*
	 * 【系统自动】创建扑克牌:
	 * 黑桃2,黑桃3,黑桃4,黑桃5,黑桃6,黑桃7,黑桃8,黑桃9,黑桃10,黑桃J,黑桃Q,黑桃K,黑桃A
	 * 红桃2,红桃3,红桃4,红桃5,红桃6,红桃7,红桃8,红桃9,红桃10,红桃J,红桃Q,红桃K,红桃A
	 * 梅花2,梅花3,梅花4,梅花5,梅花6,梅花7,梅花8,梅花9,梅花10,梅花J,梅花Q,梅花K,梅花A
	 * 方块2,方块3,方块4,方块5,方块6,方块7,方块8,方块9,方块10,方块J,方块Q,方块K,方块A
	 * 创建2名玩家,编号分别是输入字符串型
	 * 洗牌:将顺序打乱
	 * 发牌:一人一张,每人发两张
	 * 比牌:比对两人的最大牌,最大者胜。
	 * 开牌:全部打印
	 */
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		Poker p=new Poker();  //创建扑克牌实例
		String[] s1=p.getType();  //取扑克牌的花色类型
		String[] s2=p.getValue();  //取扑克牌的大小

		LinkedList<String> list=new LinkedList<String>();  //限制为String类型
		for(int i=0;i<s1.length;i++){
			for(int j=0;j<s2.length;j++){
				list.add(s1[i]+s2[j]);  //编辑扑克牌
			}
		}
		System.out.println(list);  //展示扑克牌
				
		LinkedList<String> listA=new LinkedList<String>();  //限制为String类型
		for(int i=0;i<s2.length;i++){
			for(int j=0;j<s1.length;j++){
				listA.add(s1[j]+s2[i]);
			}
		}
		System.out.println();
		System.out.println("从小到大排序"+listA);  //从小到达排序扑克牌,以便后面使用indexof方法锁定位置,比较大小
		
		//分行展示打印扑克牌
		System.out.println();
		for(int x=0;x<4;x++){
			for(int k=0+x*s2.length;k<(x+1)*s2.length;k++){
				System.out.print(list.get(k)+" ");
			}
			System.out.println();
		}
		
		Collections.shuffle(list);  //使用Collections.shuffle()方法洗牌,打乱顺序
		
		//创建两个参与者
		Player  player1=new Player();
		Player  player2=new Player();
		
		//使用try catch捕捉异常,要求输入的必须是int格式
		System.out.println();
		System.out.println("请输入第一位player的ID和名字:");
		while(true){
			try {
				System.out.print("ID:");
				Scanner sc=new Scanner(System.in);
				player1.setID(sc.nextInt());
				break;
			} catch (InputMismatchException e) {
				System.out.println("请输入正确的格式!");
				continue;
			}
		}
		while(true){
			try {
				System.out.print("姓名:");
				Scanner sc=new Scanner(System.in);
				player1.setName(sc.next());
				break;
			} catch (InputMismatchException e) {
				System.out.println("请输入正确的格式!");
				continue;
			}
		}
		
		System.out.println("请输出第二位player的ID和名字:");
		while(true){
			try {
				System.out.println("ID:");
				Scanner sc=new Scanner(System.in);
				player2.setID(sc.nextInt());
				break;
			} catch (InputMismatchException e) {
				System.out.println("请输入正确的格式!");
				continue;
				}
		}
		while(true){
			try {
				System.out.print("姓名:");
				Scanner sc=new Scanner(System.in);
				player2.setName(sc.next());
				break;
			} catch (InputMismatchException e) {
				System.out.println("请输入正确的格式!");
				continue;
			}
		}
		
		//轮流取牌
		@SuppressWarnings("unused")
		String getp1=list.get(0);
		LinkedList<String> p1=new LinkedList<String>();
		LinkedList<String> p2=new LinkedList<String>();
		p1.add(list.get(0));
		p2.add(list.get(1));
		p1.add(list.get(2));
		p2.add(list.get(3));
		
		//开牌
		System.out.println();
		System.out.println("第一位取牌:"+p1);
		System.out.println("第二位取牌:"+p2);
		
		//找到取牌的次序
		int index11=listA.indexOf(p1.get(0));
		int index12=listA.indexOf(p1.get(1));
		int index21=listA.indexOf(p2.get(0));
		int index22=listA.indexOf(p2.get(1));

//		System.out.println();
//		System.out.println("4张牌的次序分别是:"+index11+" "+index12+" "+index21+" "+index22);
		
		System.out.println();
		int max1=getMax(index11, index12);  //挑出第一个人取牌的大者
//		System.out.println("第一个人的大牌次序是:"+max1);
		int max2=getMax(index21, index22);  //挑出第二个人取牌的大者
//		System.out.println("第一个人的大牌次序是:"+max2);
		int maxLast=getMax(max1,max2);  //挑出两人牌的大者
//		System.out.println("两个人的大牌次序是:"+maxLast);
		
		//展示打印胜者
		System.out.println();
		System.out.print("所以胜者是:");
		if(maxLast==max1){
			System.out.println("第一个人");
		}
		if(maxLast==max2){
			System.out.println("第二个人");
		}
				
	}  //main end
	
	public static int getMax(int a,int b){  //比较两个数的大小,返回较大者。
		if(a>b){
			return a;
		}else{
			return b;
		}
		
	}  //getMax end
}  //class end

//运行结果
[方块2, 方块3, 方块4, 方块5, 方块6, 方块7, 方块8, 方块9, 方块10, 方块J, 方块Q, 方块K, 方块A, 梅花2, 梅花3, 梅花4, 梅花5, 梅花6, 梅花7, 梅花8, 梅花9, 梅花10, 梅花J, 梅花Q, 梅花K, 梅花A, 红桃2, 红桃3, 红桃4, 红桃5, 红桃6, 红桃7, 红桃8, 红桃9, 红桃10, 红桃J, 红桃Q, 红桃K, 红桃A, 黑桃2, 黑桃3, 黑桃4, 黑桃5, 黑桃6, 黑桃7, 黑桃8, 黑桃9, 黑桃10, 黑桃J, 黑桃Q, 黑桃K, 黑桃A]

从小到大排序[方块2, 梅花2, 红桃2, 黑桃2, 方块3, 梅花3, 红桃3, 黑桃3, 方块4, 梅花4, 红桃4, 黑桃4, 方块5, 梅花5, 红桃5, 黑桃5, 方块6, 梅花6, 红桃6, 黑桃6, 方块7, 梅花7, 红桃7, 黑桃7, 方块8, 梅花8, 红桃8, 黑桃8, 方块9, 梅花9, 红桃9, 黑桃9, 方块10, 梅花10, 红桃10, 黑桃10, 方块J, 梅花J, 红桃J, 黑桃J, 方块Q, 梅花Q, 红桃Q, 黑桃Q, 方块K, 梅花K, 红桃K, 黑桃K, 方块A, 梅花A, 红桃A, 黑桃A]

方块2 方块3 方块4 方块5 方块6 方块7 方块8 方块9 方块10 方块J 方块Q 方块K 方块A 
梅花2 梅花3 梅花4 梅花5 梅花6 梅花7 梅花8 梅花9 梅花10 梅花J 梅花Q 梅花K 梅花A 
红桃2 红桃3 红桃4 红桃5 红桃6 红桃7 红桃8 红桃9 红桃10 红桃J 红桃Q 红桃K 红桃A 
黑桃2 黑桃3 黑桃4 黑桃5 黑桃6 黑桃7 黑桃8 黑桃9 黑桃10 黑桃J 黑桃Q 黑桃K 黑桃A 

请输入第一位player的ID和名字:
ID:1
姓名:Jack
请输出第二位player的ID和名字:
ID:
2
姓名:John

第一位取牌:[方块J, 方块Q]
第二位取牌:[黑桃A, 红桃8]


所以胜者是:第二个人


正在回答

3 回答

我觉得你要是对扑克牌进行排序的话,可以应用COLLECTIONS.SORT()方法

我的程序的参考,可以参考下:

 public void testSort(){  
  System.out.println("-------------开始洗牌--------------");
  List<Apoker> apokerList=new ArrayList<Apoker>();
  apokerList.addAll( Arrays.asList(pokers)); 
  Collections.sort(apokerList,new PokeComparator());
  System.out.print("打乱顺序后的扑克牌为:[");
  for(Apoker poker:apokerList){             //思考这里为何要用Object呢?因为元素取出的时候它会被认为是类
     
   System.out.print(poker.huase + poker.dianshu+","); 
         }
  System.out.println("]");

0 回复 有任何疑惑可以回复我~
#1

慕粉3170877

你用Collections.shuffle()方法的时候,并没有对其打印输出啊
2016-07-05 回复 有任何疑惑可以回复我~
#2

般不丢 提问者 回复 慕粉3170877

最好不要输出,因为实际打牌的时候只会亮出打出的牌,不会把桌上没有起的牌全部翻开。
2016-07-17 回复 有任何疑惑可以回复我~

Scanner sc=new Scanner(System.in);在循环体里面就不会死循环,在外面就死循环。

0 回复 有任何疑惑可以回复我~

你的主程序中  try catch上一行循环条件为什么不是判断式而是true呢?是为了创建一个死循环么?

可以试试for(int i=0;i=2;){

if(判断式){

i=0

}else{

i=2

}
}

0 回复 有任何疑惑可以回复我~
#1

般不丢 提问者

Scanner sc=new Scanner(System.in);在循环体里面就不会死循环,在外面就死循环。
2016-06-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

帮忙看看我的代码哪里需要改善的地方

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信