亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

原諒我到現在才理解Comparable的compareTo方法如何使用....今天回頭寫代碼,這么寫都不對,最后又看了遍comparable才理解了 ....

注意這里的內容我已經更新了,原來的刪掉了.這是我最新的代碼..修改過的,上午半天寫出來了,結果bug好幾個,然后就是排序不正常,一直弄到快晚上...現在好了,,大家看看有什么問題沒有,提供下載地址:

http://pan.baidu.com/s/1hrL2SS0

整體結構如下:

package?item;

public?class?Card?implements?Comparable<Card>?{

	private?String?point;
	private?String?variety;
	private?String[]?p?=?{?"2",?"3",?"4",?"5",?"6",?"7",?"8",?"9",?"10",?"J",?"Q",?"K",?"A"?};
	private?String[]?v?=?{?"黑桃",?"紅桃",?"梅花",?"方塊"?};

	public?String?getVariety()?{
		return?variety;
	}

	public?void?setVariety(int?variety)?{
		this.variety?=?v[variety];
	}

	public?String?getPoint()?{
		return?point;
	}

	public?void?setPoint(int?point)?{
		this.point?=?p[point];
	}

	public?Card()?{

	}

	@Override
	public?String?toString()?{
		return?this.getVariety()?+?this.getPoint();
	}

	@Override
	public?int?compareTo(Card?o)?{
		String?point?=?"12345678910JQKA";
		String?variety?=?"方塊梅花紅桃黑桃";
		int?p?=?point.indexOf(this.getPoint())-point.indexOf(o.getPoint());
		int?v?=?variety.indexOf(this.getVariety())-variety.indexOf(o.getVariety());
		//String?str2?=?"黑桃紅桃梅花方塊";
		return?p*4+v/2;
	}

}
package?item;

import?java.util.List;
import?java.util.Scanner;

public?class?Player?{

	private?String?name;
	private?int?id;
	private?List<Card>?cardList;
	int?count;
	Scanner?in;

	public?Player()?{

	}

	public?String?getName()?{
		return?name;
	}

	public?int?getId()?{
		return?id;
	}

	public?void?setName()?{
		in?=?new?Scanner(System.in);
		System.out.println("請輸入姓名");
		name?=?in.next();
	}

	public?void?SetId()?{
		if?(count?==?3)?{
			System.out.println("對不起,輸出次數達到上限,即將退出系統");
			return;
		}
		count++;
		in?=?new?Scanner(System.in);
		System.out.println("請輸出入id");
		try?{
			id?=?in.nextInt();
			if(id<=0){
				throw?new?RuntimeException();
			}
		}?catch?(Exception?e)?{
			if?(count?<?3)
				System.out.println("對不起,請輸出一個正整數");
			SetId();
		}
	}

	@Override
	public?String?toString()?{
		return?"Player?[name="?+?name?+?",?id="?+?id?+?"]";
	}

	public?List<Card>?getCardList()?{
		return?cardList;
	}

	public?void?setCardList(List<Card>?cardList)?{
		this.cardList?=?cardList;
	}

	public?void?addCardList(Card?c)?{
		
		this.cardList.add(c);

	}

}
package?util;

import?java.util.ArrayList;
import?java.util.Collections;
import?java.util.Iterator;
import?java.util.List;
import?item.Card;
import?item.Player;

public?class?Utils?{

	List<Card>?cardList?=?new?ArrayList<Card>();

	public?List<Card>?createCard()?{
		for?(int?i?=?0;?i?<?13;?i++)?{
			for?(int?j?=?0;?j?<?4;?j++)?{
				Card?card?=?new?Card();
				card?=?new?Card();
				card.setPoint(i);
				card.setVariety(j);
				cardList.add(card);
			}
		}
		System.out.println();
		return?cardList;
	}

	public?Player?playerRegistered()?{
		Player?p?=?new?Player();
		p.SetId();
		p.setName();
		return?p;
	}

	public?void?dealCard(Player?p1,?Player?p2,?List<Card>?cardList)?{
		int?i?=?1;
		p1.setCardList(new?ArrayList<Card>());
		p2.setCardList(new?ArrayList<Card>());
		Iterator<Card>?iterator?=?cardList.iterator();
		while?(iterator.hasNext())?{
			if?(i?%?2?==?1)?{
				System.out.println("玩家"?+?p1.getName()?+?"拿牌");
				p1.addCardList(iterator.next());
			}
			if?(i?%?2?==?0)?{
				System.out.println("玩家"?+?p2.getName()?+?"拿牌");
				p2.addCardList(iterator.next());
			}
			if?(i?>=?4)?{
				break;
			}
			i++;
		}
	}

	public??void?sortCard(List<Card>?cardList){
		Collections.sort(cardList);
		System.out.println(cardList);
	}


	public?void?shffleCard(List<Card>?cardList){
????????Collections.shuffle(?cardList);
????}
	public?Player?pointCard(Player?p1,?Player?p2)?{
		List<Card>?sum?=?new?ArrayList<Card>();
		sum.addAll(p1.getCardList());
		sum.addAll(p2.getCardList());
		Card?max?=?Collections.max(sum);
		Player?winner?=?sum.indexOf(max)?<=?2???p1?:?p2;
		System.out.println("玩家"?+?winner.getName()?+?"贏");
		System.out.println("玩家"?+?winner.getName()?+?"最大的手牌為:"?+?max.toString());
		return?winner;
	}
}
package?View;

import?java.util.List;
import?item.Card;
import?item.Player;
import?util.Utils;

public?class?View?{

	public?static?void?main(String[]?args)?{
		
		Utils?util?=?new?Utils();
		System.out.println("------------創建撲克牌------------");
		List<Card>?cardList?=?util.createCard();
		System.out.println(cardList);
		System.out.println("-----------撲克牌創建成功----------");
		System.out.println("------------玩家注冊……-------------");
		
		Player?p1?=?util.playerRegistered();
		if(p1.getId()==0){
			return;
		}
		Player?p2?=?util.playerRegistered();
		if(p2.getId()==0){
			return;
		}
		System.out.println("注冊的玩家為:");
		System.out.println(p1.toString());
		System.out.println(p2.toString());
		System.out.println("------------開始洗牌:-------------");
		util.shffleCard(cardList);
		System.out.println("------------開始發牌:-------------");
		util.dealCard(p1,?p2,?cardList);
		System.out.println("------------發牌結束!-------------");
		System.out.println("------------開始游戲……-------------");
		Player?winner?=?util.pointCard(p1,?p2);
		//這里可以把pointCard()方法該為返回值為void類型的;
		System.out.println("兩人的手牌分別為:");
		System.out.println("玩家"+p1.getName()+"手牌為:"+p1.getCardList());
		System.out.println("玩家"+p2.getName()+"手牌為:"+p2.getCardList());
		System.out.println("本局勝利者的信息為:"+winner.toString());
		System.out.println("---------本局結束,再來一次吧??!----------");
		
		
	}
}

注意樓下我寫的都有點問題,不用看了...

正在回答

5 回答

啊...有一個bug,現稍作修改..見諒..bug原因輸入一個負數的id 能通過...

然后如果一直輸入非int類型的id,會讓id為0..在這里修改了..代碼如下...

player:

package?item;

import?java.util.List;
import?java.util.Scanner;

public?class?Player?{

	private?String?name;
	private?int?id;
	private?List<Card>?cardList;
	int?count;
	Scanner?in;

	public?Player()?{

	}

	public?String?getName()?{
		return?name;
	}

	public?int?getId()?{
		return?id;
	}

	public?void?setName()?{
		in?=?new?Scanner(System.in);
		System.out.println("請輸入姓名");
		name?=?in.next();
	}

	public?void?SetId()?{
		if?(count?==?3)?{
			System.out.println("對不起輸出次數上限");
			return;
		}
		count++;
		in?=?new?Scanner(System.in);
		System.out.println("請輸出入id");
		try?{
			id?=?in.nextInt();
			if(id<=0){
				throw?new?RuntimeException();
			}
		}?catch?(Exception?e)?{
			if?(count?<?3)
				System.out.println("對不起,請輸出數字");
			SetId();
		}
	}

	@Override
	public?String?toString()?{
		return?"Player?[name="?+?name?+?",?id="?+?id?+?"]";
	}

	public?List<Card>?getCardList()?{
		return?cardList;
	}

	public?void?setCardList(List<Card>?cardList)?{
		this.cardList?=?cardList;
	}

	public?void?addCardList(Card?c)?{
		
		this.cardList.add(c);

	}

}

view層

package?View;

import?java.util.Set;
import?item.Card;
import?item.Player;
import?util.Utils;

public?class?View?{

	public?static?void?main(String[]?args)?{
		Utils?util?=?new?Utils();
		System.out.println("------------創建撲克牌------------");
		Set<Card>?cardSet?=?util.createCard();
		System.out.println("-----------撲克牌創建成功----------");
		System.out.println("------------玩家注冊……-------------");
		Player?p1?=?util.playerRegistered();
		if(p1.getId()==0){
			return;
		}
		Player?p2?=?util.playerRegistered();
		if(p1.getId()==0){
			return;
		}
		System.out.println("注冊的玩家為:");
		System.out.println(p1.toString());
		System.out.println(p2.toString());
		System.out.println("------------開始發牌:-------------");
		util.dealCard(p1,?p2,?cardSet);
		System.out.println("------------發牌結束!-------------");
		System.out.println("------------開始游戲……-------------");
		Player?winner?=?util.pointCard(p1,?p2);
		//這里可以把pointCard()方法該為返回值為void類型的;
		System.out.println("兩人的手牌分別為:");
		util.showCard(p1);
		util.showCard(p2);
		System.out.println("本局勝利者的信息為:"+winner.toString());
		System.out.println("---------本局結束,再來一次吧!!----------");

	}
}

其他不動.

更改后的公開下載鏈接:http://pan.baidu.com/s/1geIhiIB

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

關于這個綜合練習,當時我寫的是半成品,很多不足,今天我重新寫了代碼,有需要參考的可以來看看...http://pan.baidu.com/s/1nuLsISx

這個是view層:

package?View;

import?java.util.Set;
import?item.Card;
import?item.Player;
import?util.Utils;

public?class?View?{

	public?static?void?main(String[]?args)?{
		Utils?util?=?new?Utils();
		System.out.println("------------創建撲克牌------------");
		Set<Card>?cardSet?=?util.createCard();
		System.out.println("-----------撲克牌創建成功----------");
		Player?p1?=?util.playerRegistered();
		System.out.println("------------玩家注冊……-------------");
		Player?p2?=?util.playerRegistered();
		System.out.println("注冊的玩家為:");
		System.out.println(p1.toString());
		System.out.println(p2.toString());
		System.out.println("------------開始發牌:-------------");
		util.dealCard(p1,?p2,?cardSet);
		System.out.println("------------發牌結束!-------------");
		System.out.println("------------開始游戲……-------------");
		Player?winner?=?util.pointCard(p1,?p2);
		//這里可以把pointCard()方法該為返回值為void類型的;
		System.out.println("兩人的手牌分別為:");
		util.showCard(p1);
		util.showCard(p2);
		System.out.println("本局勝利者的信息為:"+winner.toString());
		System.out.println("---------本局結束,再來一次吧?。?---------");

	}
}

這個是Util層:

package?util;

import?java.util.ArrayList;
import?java.util.Collections;
import?java.util.HashSet;
import?java.util.Iterator;
import?java.util.List;
import?java.util.Set;

import?item.Card;
import?item.Player;

public?class?Utils?{

	Set<Card>?cardSet?=?new?HashSet<Card>();

	public?Set<Card>?createCard()?{
		for?(int?i?=?0;?i?<?13;?i++)?{
			for?(int?j?=?0;?j?<?4;?j++)?{
				Card?card?=?new?Card();
				card?=?new?Card();
				card.setPoint(i);
				card.setVariety(j);
				//?Card?c?=?new?Card(card.getPoint(),?card.getVariety());
				System.out.print(card.toString()?+?"?");
				cardSet.add(card);
			}
		}
		System.out.println();
		return?cardSet;
	}

	public?Player?playerRegistered()?{
		Player?p?=?new?Player();
		p.SetId();
		p.setName();
		return?p;
	}

	public?void?dealCard(Player?p1,?Player?p2,?Set<Card>?cardSet)?{
		/*在這里使用ForEach亦可以
		?*?System.out.println(cardSet.size());?for?(Card?card?:?cardSet)?{
		?*?System.out.print(card.toString()+"??");?}
		?*/
		int?i?=?1;
		p1.setCardList(new?ArrayList<Card>());
		p2.setCardList(new?ArrayList<Card>());
		Iterator<Card>?iterator?=?cardSet.iterator();
		while?(iterator.hasNext())?{
			if?(i?%?2?==?0)?{
				System.out.println("玩家"?+?p1.getName()?+?"拿牌");
				//?System.out.println(iterator.next().toString()?+?"?");
				p1.addCardList(iterator.next());
			}
			if?(i?%?2?==?1)?{
				System.out.println("玩家"?+?p2.getName()?+?"拿牌");
				//?System.out.println(iterator.next().toString()?+?"?");
				p2.addCardList(iterator.next());
			}
			if?(i?>=?4)?{
				break;
			}
			i++;
		}
	}

	public?void?showCard(Player?p)?{
		System.out.println("玩家"+p.getName()?+?"手牌:");
		for?(Card?card?:?p.getCardList())?{
			System.out.print(card.toString()?+?"?");
		}
		System.out.println();
	}

	public?Player?pointCard(Player?p1,?Player?p2)?{
		List<Card>?sum?=?new?ArrayList<Card>();
		sum.addAll(p1.getCardList());
		sum.addAll(p2.getCardList());
		for?(Card?card?:?sum)?{
			System.out.println(card.toString());
		}
		Card?max?=?Collections.max(sum);
		Player?winner?=?sum.indexOf(max)?<=?2???p1?:?p2;
		System.out.println("玩家"+winner.getName()?+?"贏");
		System.out.println("玩家"+winner.getName()+"最大的手牌為:"?+?max.toString());
		return?winner;
	}
}

這個是items層

Card類:

package?item;

import?java.util.ArrayList;
import?java.util.Arrays;
import?java.util.List;

public?class?Card?implements?Comparable<Card>?{

	private?String?point;
	private?String?variety;
	private?String[]?p?=?{?"2",?"3",?"4",?"5",?"6",?"7",?"8",?"9",?"10",?"J",?"Q",?"K",?"A"?};
	private?String[]?v?=?{?"黑桃",?"紅桃",?"梅花",?"方塊"?};
	public?String?getVariety()?{
		return?variety;
	}

	public?void?setVariety(int?variety)?{
		this.variety?=?v[variety];
	}

	public?String?getPoint()?{
		return?point;
	}

	public?void?setPoint(int?point)?{
		this.point?=?p[point];
	}

	public?Card()?{

	}

	@Override
	public?String?toString()?{
		return?this.getVariety()?+?this.getPoint();
	}

	@Override
	public?int?compareTo(Card?o)?{
		??List<String>?point=new?ArrayList<String>();??
		??List<String>?variety=new?ArrayList<String>();??
		??point.addAll(Arrays.asList(p));
		??variety.addAll(Arrays.asList(v));
		??int?num?=?(point.indexOf(o.getPoint()))*4+variety.indexOf(o.getVariety());
		return?num;
	}

}

Player類:

package?item;

import?java.util.List;
import?java.util.Scanner;

public?class?Player?{

	private?String?name;
	private?int?id;
	private?List<Card>?cardList;
	int?count;
	Scanner?in;

	public?Player()?{

	}

	public?String?getName()?{
		return?name;
	}

	public?int?getId()?{
		return?id;
	}

	public?void?setName()?{
		in?=?new?Scanner(System.in);
		System.out.println("請輸入姓名");
		name?=?in.next();
	}

	public?void?SetId()?{
		if?(count?==?3)?{
			System.out.println("對不起輸出次數上限");
			return;
		}
		count++;
		in?=?new?Scanner(System.in);
		System.out.println("請輸出入id");
		try?{
			id?=?in.nextInt();
		}?catch?(Exception?e)?{
			if?(count?<?3)
				System.out.println("對不起,請輸出數字");
			SetId();
		}
	}

	@Override
	public?String?toString()?{
		return?"Player?[name="?+?name?+?",?id="?+?id?+?"]";
	}

	public?List<Card>?getCardList()?{
		return?cardList;
	}

	public?void?setCardList(List<Card>?cardList)?{
		this.cardList?=?cardList;
	}

	public?void?addCardList(Card?c)?{
		
		this.cardList.add(c);

	}

}

還有,我上傳了包里有個test.java和Variety.java沒用,可以刪掉

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

寫的太好啦?。?!有個問題想問一下,Comparat類應該是跟max()方法有關,比較四種花色的大???能詳細講解一下這塊的原理嗎?

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

gao634209276 提問者

那個是半成品,今天我特意回頭重新寫了代碼.可以下過去看看http://pan.baidu.com/s/1nuLsISx
2016-04-16 回復 有任何疑惑可以回復我~
#2

gao634209276 提問者

用這個下載http://pan.baidu.com/s/1geIhiIB
2016-04-16 回復 有任何疑惑可以回復我~
#3

gao634209276 提問者

這里我今天該了代碼,max是使用了compareTo()方法,主要是要理解復寫這個方法..方法中的this和o不是一個對象...是兩個比較對象. 我把撲克牌按大小順序,用整數0-52依次代表,然后retrun 比較后的結果.
2016-04-16 回復 有任何疑惑可以回復我~
#4

gao634209276 提問者 回復 qq_星語_4

同點數有4個花色,每增加一點,需要留4個數字來給這個點數花色排序. 對啊,sort是驗證排序規則是否生效,是否符合要求.如果你把p*4改為比4小的數你試試sort結果就知道了
2016-04-18 回復 有任何疑惑可以回復我~
查看2條回復

寫的真好,你那個怎么比較大小的???沒看太明白!把思路說一下唄,謝謝了!

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

gao634209276 提問者

我發的這個當時沒完善,代碼中默認排序根據List元素大小排,如果數字相同,根據設置的Comparator<Card>臨時排序,在實現類中復寫排序規則.. 排序規則是設置四種花色為一個有序的list,取出方法參數中的花色找到list中的index,返回index的差值.
2016-04-12 回復 有任何疑惑可以回復我~
#2

gao634209276 提問者

現在覺得這樣設置一個Map不是很好..如果給這個項目中再添加功能,還需要每次手工判斷把11,12,13,14換為JQKA.不如直接設置一個字符串的List...
2016-04-12 回復 有任何疑惑可以回復我~
#3

qq_搥憶迣厾沬唻_0 回復 gao634209276 提問者

哦哦,那你現在有完善的嗎?
2016-04-12 回復 有任何疑惑可以回復我~
#4

gao634209276 提問者 回復 qq_搥憶迣厾沬唻_0

時間太長,代碼早刪了...
2016-04-12 回復 有任何疑惑可以回復我~
#5

gao634209276 提問者 回復 qq_搥憶迣厾沬唻_0

改成str類型的list我當時沒編寫
2016-04-12 回復 有任何疑惑可以回復我~
#6

gao634209276 提問者 回復 qq_搥憶迣厾沬唻_0

看到大家又恢復我,今天花了半天又重新做了這個小項目. 改進了很多.可以下載看看.http://pan.baidu.com/s/1nuLsISx
2016-04-16 回復 有任何疑惑可以回復我~
#7

gao634209276 提問者 回復 qq_搥憶迣厾沬唻_0

使用這個地址:http://pan.baidu.com/s/1geIhiIB
2016-04-16 回復 有任何疑惑可以回復我~
#8

gao634209276 提問者 回復 qq_搥憶迣厾沬唻_0

上面的都寫的不對,這是最終版... http://pan.baidu.com/s/1hrL2SS0
2016-04-16 回復 有任何疑惑可以回復我~
查看5條回復

撲克不能有1,小改了一下,在num數組里刪除1,在最后加上14,然后在hashMap映射里加上put(14,'A');發現我這編碼是編的最少的。。差很多內容啊,這個就當初稿吧,明天再看看

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

舉報

0/150
提交
取消

原諒我到現在才理解Comparable的compareTo方法如何使用....今天回頭寫代碼,這么寫都不對,最后又看了遍comparable才理解了 ....

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號