原諒我到現在才理解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("---------本局結束,再來一次吧??!----------");
}
}注意樓下我寫的都有點問題,不用看了...
2016-04-16
啊...有一個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
2016-04-16
關于這個綜合練習,當時我寫的是半成品,很多不足,今天我重新寫了代碼,有需要參考的可以來看看...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沒用,可以刪掉
2016-04-15
寫的太好啦?。?!有個問題想問一下,Comparat類應該是跟max()方法有關,比較四種花色的大?。磕茉敿氈v解一下這塊的原理嗎?
2016-04-12
寫的真好,你那個怎么比較大小的???沒看太明白!把思路說一下唄,謝謝了!
2016-02-12
撲克不能有1,小改了一下,在num數組里刪除1,在最后加上14,然后在hashMap映射里加上put(14,'A');發現我這編碼是編的最少的。。差很多內容啊,這個就當初稿吧,明天再看看