第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

我的作業(yè)如下,有點疑惑,路過求指點

個人小結,寫的過程中主要卡在三個地方,:

1.洗牌打亂順序??不知道用Collections的shuffle()方法
?自己用ArrayList遍歷放到HashSet里再放回去試了一通,完全不能用(順序確實亂了,但每次都亂的一毛一樣)
2.輸入ID不正時,如何重復輸入。?琢磨出while死循環(huán)+try-catch方式????
??一直有個疑問:編譯器總提示Scanner對象從未close,加了close又會出現(xiàn)死循環(huán),沒等用戶輸入就向下繼續(xù)執(zhí)行了
3.比較牌面時,Comparable和Comparator重寫的方法的實現(xiàn)方式
??打撲克2最大,A其次,然后K?Q?J?
??只知道課程里講到的compareTo和compare方法,于是投機取巧利用HashMap硬將無規(guī)律字符串與整數(shù)值映射,再compare.
??疑問:參考了其它同學的內(nèi)容,一種做法是把代表牌面大小(點數(shù)和花色)變一個屬性會更簡便些,或者其它做法...?

代碼如下:

GameTest.java
package?test_pukepa_game;
import?java.util.ArrayList;
import?java.util.Collections;
import?java.util.InputMismatchException;
import?java.util.List;
import?java.util.Scanner;
public?class?GameTest?{
????private?List<PlayingCard>?cardsList;
????private?List<Player>?playerList;
????public?GameTest()?{
????????this.cardsList??=?new?ArrayList<>();
????????this.playerList?=?new?ArrayList<Player>();
????????}
????//?創(chuàng)建撲克牌
????public?void?makeCards()?{
????????String[]?types?=?{"黑桃","紅桃","梅花","方片"};
????????String[]?points?=?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
????????List<String>?cards?=?new?ArrayList<String>();
?
????????for?(int?i?=?0;?i?<?types.length;?i++)?{
????????????for?(int?j?=?0;?j?<?points.length;?j++)?{
????????????????cardsList.add(new?PlayingCard(points[j],?types[i]));
????????????????cards.add(types[i]?+?points[j])??;
????????????}
????????}
????????System.out.println("----------撲克牌創(chuàng)建成功!------------");
????????System.out.println("為:"?+?cards.toString());
????}
????//?洗牌
????public?void?resetCards()?{
????????//?重復玩時,?清空玩家的手牌
????????if(playerList.size()?>?0)?{
????????????for?(Player?player?:?playerList)?{
????????????????????player.getCards().clear();
????????????}
????????}
????????System.out.println("----------洗牌前:"+cardsList.toString());
????????//*******Collections類的shuffle()方法的作用是將List中的內(nèi)容隨機打亂順序*****//
????????Collections.shuffle(cardsList);
????????//**********************************//
????????System.out.println("----------洗牌后:"+cardsList.toString());
????????System.out.println("----------洗牌結束!------------------");
????}
????//?創(chuàng)建玩家
????public?void?makePlayer()?{
????????for?(int?i?=?1;?i?<?3;?i++)?{
????????????System.out.println("請輸入第"?+?i?+?"位玩家的ID和姓名:");
????????????while?(true)?{
????????????????try?{
????????????????????Scanner?console?=?new?Scanner(System.in);
????????????????????System.out.println("輸入ID:");
????????????????????Integer?id?=?console.nextInt();
????????????????????System.out.println("輸入姓名:");
????????????????????String?name?=?console.next();
????????????????????playerList.add(new?Player(id,?name));
????????????????????break;
????????????????}?catch?(InputMismatchException?e)?{
????????????????????//?TODO?Auto-generated?catch?block
????????????????????System.out.println("請輸入整數(shù)類型的ID!");
????????????????????continue;
????????????????}
???????????}
????????}
????????for?(Player?player?:?playerList)?{
????????????System.out.println("---歡迎玩家:"?+?player.getName());
????????}
????}
????//?發(fā)牌?一人發(fā)兩張牌
????public?void?takeCards()?{
????????for?(int?i?=?0;?i?<?2;?i++)?{
????????????for?(int?j?=?0;?j?<?playerList.size();?j++)?{
????????????????Player?player?=?playerList.get(j);
????????????????player.getCards().add(new?PlayingCard(cardsList.get(i*2?+j).getNumber(),?cardsList.get(i*2+j).getType()));
????????????????System.out.println("---玩家:"+?player.getName()?+?"-拿牌");
????????????}
????????}
????????System.out.println("----------發(fā)牌結束!------------------");
????}
????
????//?游戲開始比較
????public?void?startGame()?{
????????ArrayList<PlayingCard>?cards?=?new?ArrayList<PlayingCard>();
????????//取出手中點數(shù)最大的牌
????????for?(Player?player?:?playerList)?{
????????????Collections.sort(player.getCards());
????????????PlayingCard?pc?=?player.getCards().get(1);
????????????cards.add(pc);
????????????System.out.println("玩家:"+player.getName()?+?"最大的手牌為:"+pc.getType()+pc.getNumber());
????????}
????????//?最大的牌進行比較
????????if(cards.get(0).getNumber().equals(cards.get(1).getNumber()))?{
????????????Collections.sort(cards,?new?PlayingCardComparator());
????????}?else?{
????????????Collections.sort(cards);
????????}
????????
????????//?遍歷找出最大牌的擁有者為勝者???hashCode?和?equals方法重寫
????????for?(Player?player?:?playerList)?{
????????????if(player.getCards().contains(cards.get(1))){
????????????????System.out.println("---------玩家:"+player.getName()+"獲勝!--------------------");
????????????????break;
????????????}
????????}
????????
????????System.out.println("玩家各自的手牌為:");
????????for?(Player?player?:?playerList)?{
????????????System.out.println(player.getName()+":"+player.getCards().toString());
????????}
????}
????
????public?static?void?main(String[]?args)?{
????????GameTest?gt?=?new?GameTest();
????????System.out.println("----------創(chuàng)建撲克牌------------------");
????????gt.makeCards();
????????gt.makePlayer();
????????while(true)?{
????????????System.out.println("----------開始洗牌...--------------------");
????????????gt.resetCards();
????????????System.out.println("----------開始發(fā)牌...--------------------");
????????????gt.takeCards();
????????????System.out.println("----------開始游戲...--------------------");
????????????gt.startGame();
????????????System.out.println("----------還要繼續(xù)嗎?1--是?0--否------");
????????????Scanner?console?=?new?Scanner(System.in);
????????????try?{
????????????????if(0?==?console.nextInt())?{
????????????????????System.out.println("----------游戲結束------");
????????????????????break;
????????????????}
????????????????}?catch(InputMismatchException?e)?{
????????????????System.out.println("----------游戲結束------");
????????????????break;
????????????????}
????????}
????}
}
PlayingCard.java???//撲克牌
package?test_pukepa_game;
import?java.util.HashMap;
public?class?PlayingCard?implements?Comparable<PlayingCard>{
private?String?number;
private?String?type;
public?PlayingCard(String?number,?String?type)?{
this.number?=?number;
this.type?=?type;
}
public?String?getNumber()?{
return?number;
}
public?void?setNumber(String?number)?{
this.number?=?number;
}
public?String?getType()?{
return?type;
}
public?void?setType(String?type)?{
this.type?=?type;
}
@Override
public?int?hashCode()?{
final?int?prime?=?31;
int?result?=?1;
result?=?prime?*?result?+?((number?==?null)???0?:?number.hashCode());
result?=?prime?*?result?+?((type?==?null)???0?:?type.hashCode());
return?result;
}
@Override
public?boolean?equals(Object?obj)?{
if?(this?==?obj)
return?true;
if?(obj?==?null)
return?false;
if?(!(obj?instanceof?PlayingCard))
return?false;
PlayingCard?other?=?(PlayingCard)?obj;
if?(number?==?null)?{
if?(other.number?!=?null)
return?false;
}?else?if?(!number.equals(other.number))
return?false;
if?(type?==?null)?{
if?(other.type?!=?null)
return?false;
}?else?if?(!type.equals(other.type))
return?false;
return?true;
}
@Override
public?int?compareTo(PlayingCard?o)?{
//?TODO?Auto-generated?method?stub
HashMap<String,?Integer>?hashmap?=?new?HashMap<String,?Integer>();
for(int?i?=?3;?i?<=10;?i++)?{
hashmap.put(String.valueOf(i),?i);
}
hashmap.put("J",?11);
hashmap.put("Q",?12);
hashmap.put("K",?13);
hashmap.put("A",?14);
hashmap.put("2",?15);
//?按照點數(shù)比較大小
return?hashmap.get(this.number).compareTo(hashmap.get(o.number));
}
@Override
public?String?toString()?{
return?type+?number?;
}
}
PlayingCardComparator.java??//按花色比較的Comparator接口實現(xiàn)類
package?test_pukepa_game;
import?java.util.Comparator;
import?java.util.HashMap;
public?class?PlayingCardComparator?implements?Comparator<PlayingCard>?{
@Override
public?int?compare(PlayingCard?o1,?PlayingCard?o2)?{
//?TODO?Auto-generated?method?stub
HashMap<String,?Integer>?hashmap?=?new?HashMap<String,?Integer>();
hashmap.put("黑桃",?4);
hashmap.put("紅桃",?3);
hashmap.put("梅花",?2);
hashmap.put("方片",?1);
return?hashmap.get(o1.getType()).compareTo(hashmap.get(o2.getType()));
}
}
Player.java?//?玩家類
package?test_pukepa_game;
import?java.util.ArrayList;
import?java.util.List;
//?玩家類
public?class?Player?{
private?Integer??id;
private?String?name;
private?List<PlayingCard>?cards;
public?Player(Integer?id,?String?name)?{
this.id?=?id;
this.name?=?name;
this.cards?=?new?ArrayList<PlayingCard>();
}
public?Integer?getId()?{
return?id;
}
public?String?getName()?{
return?name;
}
public?List<PlayingCard>?getCards()?{
return?cards;
}
}


正在回答

2 回答

shuffle()方法 有這么一個功能:

Random?rand?=?new?Random(47);

shuffle(cardsList,rand);

就可以實現(xiàn)隨機打亂? ?

網(wǎng)址:https://blog.csdn.net/u011514810/article/details/51218784

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

樓主我也卡在try語句塊這里了,我查了一些資料,也找到了你這種方法,但是據(jù)說在while語句塊中使用try效率很低,不知道樓主找到替代方法了沒?


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

舉報

0/150
提交
取消
Java入門第三季
  • 參與學習       409767    人
  • 解答問題       4521    個

Java中你必須懂得常用技能,不容錯過的精彩,快來加入吧

進入課程

我的作業(yè)如下,有點疑惑,路過求指點

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

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號