原諒我到現在才理解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:
view層
其他不動.
更改后的公開下載鏈接:http://pan.baidu.com/s/1geIhiIB
2016-04-16
關于這個綜合練習,當時我寫的是半成品,很多不足,今天我重新寫了代碼,有需要參考的可以來看看...http://pan.baidu.com/s/1nuLsISx
這個是view層:
這個是Util層:
這個是items層
Card類:
Player類:
還有,我上傳了包里有個test.java和Variety.java沒用,可以刪掉
2016-04-15
寫的太好啦?。?!有個問題想問一下,Comparat類應該是跟max()方法有關,比較四種花色的大???能詳細講解一下這塊的原理嗎?
2016-04-12
寫的真好,你那個怎么比較大小的???沒看太明白!把思路說一下唄,謝謝了!
2016-02-12
撲克不能有1,小改了一下,在num數組里刪除1,在最后加上14,然后在hashMap映射里加上put(14,'A');發現我這編碼是編的最少的。。差很多內容啊,這個就當初稿吧,明天再看看