花了一晚上寫的7-1的作業(yè)
Card類 public?class?Card??implements?Comparable<Card>{ public?String?cardColor; private?String?key; private?String?value; public?String?cardNum; public?int?num; public?String?getCardColor()?{ return?cardColor; } public?void?setCardColor(String?cardColor)?{ this.cardColor?=?cardColor; } public?int?getNum()?{ return?num; } public?void?setNum(int?num)?{ this.num?=?num; } public?Card()?{ } public?Card(String?cardColor,String?cardNum,int?num)?{ this.cardColor?=cardColor; this.cardNum?=?cardNum; this.num?=?num; } public?String?getKey()?{ return?key; } public?void?setKey(String?key)?{ this.key?=?key; } public?String?getValue()?{ return?value; } public?void?setValue(String?value)?{ this.value?=?value; } public?String?getCardNum()?{ return?cardNum; } public?void?setCardNum(String?cardNum)?{ this.cardNum?=?cardNum; } @Override public?int?compareTo(Card?o)?{ //?TODO?Auto-generated?method?stub return?this.num-o.num; } } Player類 public?class?Player?{ public?String?ID; public?String?name; public?List<Card>?playerCards; public?Player(String?ID,?String?name)?{ this.ID?=?ID; this.name?=?name; this.playerCards?=?new?ArrayList<Card>(); } public?String?getID()?{ return?ID; } public?void?setID(String?iD)?{ ID?=?iD; } public?String?getName()?{ return?name; } public?void?setName(String?name)?{ this.name?=?name; } public?List<Card>?getPlayerCards()?{ return?playerCards; } public?void?setPlayerCards(List<Card>?playerCards)?{ this.playerCards?=?playerCards; } } CardGame類 import?java.util.*; import?java.util.ArrayList; import?java.util.Collections; import?java.util.HashMap; import?java.util.List; import?java.util.Map; import?java.util.Scanner; public?class?CardGame?{ public?List<Card>?cardList; public?List<Player>?playerList; private?Scanner?input; //Player?p1; //Player?p2; public?CardGame()?{ this.cardList?=?new?ArrayList<Card>(); this.playerList?=new?ArrayList<Player>(); this.input?=?new?Scanner(System.in); } /** *?第一、要?jiǎng)?chuàng)建一副不包括大小王的撲克牌 *?@param?args */ public?void?Cards()?{ //創(chuàng)建撲克牌 System.out.println("--------------創(chuàng)建撲克牌—-----------------"); //用兩個(gè)數(shù)組來存放撲克的花色和數(shù)值 String[]?CardColor?=?new?String[]?{"黑桃","梅花","紅桃","方塊"}; String[]?CardNum?=?new?String[]?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"}; //利用for循環(huán)取出撲克的花色和數(shù)值并且存放到CardList中 for(int?i?=0;i<4;i++)?{ for(int?j=0;j<13;j++)?{ cardList.add(new?Card(CardColor[i],CardNum[j],j*10+i)); } } //遍歷打印撲克牌 System.out.println("--------------創(chuàng)建撲克牌成功—-----------------"); System.out.println("撲克牌為:"); for?(Card?card?:?cardList)?{ System.out.print(card.cardColor?+?card.cardNum?+","); } System.out.println("共有52張牌"); //利用四個(gè)for循環(huán)來獲取黑桃梅花紅桃方塊的對(duì)象,代碼繁瑣 //for(Integer?i=2;i<11;i++)?{ //Card?cd?=?new?Card("黑桃",i.toString()); //cardList.add(cd); //} //Card?cd1?=?new?Card("黑桃","A"); //cardList.add(cd1); //Card?cd2?=?new?Card("黑桃","J"); //cardList.add(cd2); //Card?cd3?=?new?Card("黑桃","Q"); //cardList.add(cd3); //Card?cd4?=?new?Card("黑桃","K"); //cardList.add(cd4); } /** *?利用collections.shuffle方法來打亂List中撲克牌順序 *?@param?args */ public?void?washCard()?{ System.out.println("--------------開始洗牌—-----------------"); Collections.shuffle(cardList); System.out.println("--------------結(jié)束洗牌—-----------------"); } /** *?創(chuàng)建玩家 *?@param?args */ public?void?players()?{ int?i=0; for(;i<2;i++)?{ try?{ System.out.println("請(qǐng)輸入第"?+?(i+1)?+"位玩家的ID:"); String?ID=?input.next(); //提示輸入玩家姓名 System.out.println("請(qǐng)輸入第"?+?(i+1)?+"位玩家的姓名:"); String?name?=input.next(); //創(chuàng)建新的玩家對(duì)象 Player?newPlayer?=?new?Player(ID,name); playerList.add(newPlayer); }catch(InputMismatchException?e)?{ System.out.println("請(qǐng)輸入正確的整數(shù)類型:"); } } } /** *?隨機(jī)發(fā)牌 *?@param?args */ public?void?launchCard()?{ //隨機(jī)給玩家發(fā)兩張牌 System.out.println("--------------開始發(fā)牌—-----------------"); Random?random?=?new?Random(); int?cardSize?=?cardList.size(); Card?card?=?new?Card(); for(int?i=0;i<2;i++)?{ for?(Player?player?:?playerList)?{ card?=cardList.get(random.nextInt(cardSize)); System.out.println("----玩家:"+?player.ID?+?":"?+?player.name?+"拿牌------"); player.playerCards.add(card); cardSize--; } } //p1.playerCards.add(cardList.get(0)); //System.out.println("----玩家:"+p1.name+"-拿牌------"); //p2.playerCards.add(cardList.get(1)); //System.out.println("----玩家:"+p2.name+"-拿牌------"); //p1.playerCards.add(cardList.get(2)); //System.out.println("----玩家:"+p1.name+"-拿牌------"); //p2.playerCards.add(cardList.get(3)); //System.out.println("----玩家:"+p2.name+"-拿牌------"); //Set<String>?keySet?=?playerList.keySet(); //int?i?=?0;? //int?j?=?0;? //while?(j?<?2)?{ //for?(String?id?:?keySet)?{? //playerList.get(id).getPlayerCards().add(cardList.get(i)); //System.out.println("----玩家:"?+?playerList.get(id).getName()?+?"-拿牌"); // //} //j++;? //} System.out.println("--------------發(fā)牌結(jié)束—-----------------"); } /** *?開始游戲 *?@param?args */ public?void?startGame()?{ System.out.println("--------------游戲開始—-----------------"); ArrayList<Card>?maxCard?=?new?ArrayList();//創(chuàng)建兩玩家最大牌的集合 for?(Player?player?:?playerList?)?{ //利用Collections.sort進(jìn)行排序 Collections.sort(player.getPlayerCards()); System.out.println(player.getName()+"最大的牌為:"?+?player.getPlayerCards().get(1).cardColor? +player.getPlayerCards().get(1).cardNum); //輸出玩家各自的手牌 System.out.println(player.getName()+"的牌為:"?+?player.getPlayerCards().get(0).cardColor? +player.getPlayerCards().get(0).cardNum?+","?+?player.getPlayerCards().get(1).cardColor? +player.getPlayerCards().get(1).cardNum); //將最大的牌存儲(chǔ) maxCard.add(player.getPlayerCards().get(1)); } //兩玩家最大的牌進(jìn)行比較 Collections.sort(maxCard); for?(Player?player?:?playerList)?{ if(player.getPlayerCards().contains(maxCard.get(1)))?{ System.out.println("恭喜玩家"+player.getName()+"獲勝"); } } } public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub CardGame?cg?=?new?CardGame(); cg.Cards(); cg.washCard(); cg.players(); cg.launchCard(); cg.startGame(); } }
創(chuàng)建玩家輸入Id和姓名,我寫了異常卻不執(zhí)行,不知道是什么問題???還是我寫錯(cuò)了???
2019-03-09
你并沒有在catch中寫出返回循環(huán)效果,那肯定不會(huì)返回呀。
在catch中做到循環(huán)效果就得在其使用try-catch語句外執(zhí)行一次強(qiáng)制循環(huán),因?yàn)閏ontinue返回效果只能用于循環(huán)體中,所以你可以測試在try-catch語句外面加 while(true){ ....}強(qiáng)制循環(huán),然后再在catch中最后加入continue語句。
值得注意的是這樣做雖然可以起到返回作用,但是Scanner輸入的值并不會(huì)刷新,所以就會(huì)出現(xiàn)無限死循環(huán)。
所以應(yīng)該在其continue語句前重新刷新Scanner值,也就是加入console=new Scanner(System.in);