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

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

花了一晚上寫的7-1的作業

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);
}
/**
*?第一、要創建一副不包括大小王的撲克牌
*?@param?args
*/
public?void?Cards()?{
//創建撲克牌
System.out.println("--------------創建撲克牌—-----------------");
//用兩個數組來存放撲克的花色和數值
String[]?CardColor?=?new?String[]?{"黑桃","梅花","紅桃","方塊"};
String[]?CardNum?=?new?String[]?{"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
//利用for循環取出撲克的花色和數值并且存放到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("--------------創建撲克牌成功—-----------------");
System.out.println("撲克牌為:");
for?(Card?card?:?cardList)?{
System.out.print(card.cardColor?+?card.cardNum?+",");
}
System.out.println("共有52張牌");
//利用四個for循環來獲取黑桃梅花紅桃方塊的對象,代碼繁瑣
//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("--------------結束洗牌—-----------------");
}
/**
*?創建玩家
*?@param?args
*/
public?void?players()?{
int?i=0;
for(;i<2;i++)?{
try?{
System.out.println("請輸入第"?+?(i+1)?+"位玩家的ID:");
String?ID=?input.next();
//提示輸入玩家姓名
System.out.println("請輸入第"?+?(i+1)?+"位玩家的姓名:");
String?name?=input.next();
//創建新的玩家對象
Player?newPlayer?=?new?Player(ID,name);
playerList.add(newPlayer);
}catch(InputMismatchException?e)?{
System.out.println("請輸入正確的整數類型:");
}
}
}
/**
*?隨機發牌
*?@param?args
*/
public?void?launchCard()?{
//隨機給玩家發兩張牌
System.out.println("--------------開始發牌—-----------------");
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("--------------發牌結束—-----------------");
}
/**
*?開始游戲
*?@param?args
*/
public?void?startGame()?{
System.out.println("--------------游戲開始—-----------------");
ArrayList<Card>?maxCard?=?new?ArrayList();//創建兩玩家最大牌的集合
for?(Player?player?:?playerList?)?{
//利用Collections.sort進行排序
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);
//將最大的牌存儲
maxCard.add(player.getPlayerCards().get(1));
}
//兩玩家最大的牌進行比較
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();
}
}

https://img1.sycdn.imooc.com//5c7e8d8e0001ed7a08960607.jpg


創建玩家輸入Id和姓名,我寫了異常卻不執行,不知道是什么問題???還是我寫錯了???

正在回答

1 回答

你并沒有在catch中寫出返回循環效果,那肯定不會返回呀。

在catch中做到循環效果就得在其使用try-catch語句外執行一次強制循環,因為continue返回效果只能用于循環體中,所以你可以測試在try-catch語句外面加 while(true){ ....}強制循環,然后再在catch中最后加入continue語句。

值得注意的是這樣做雖然可以起到返回作用,但是Scanner輸入的值并不會刷新,所以就會出現無限死循環。

所以應該在其continue語句前重新刷新Scanner,也就是加入console=new Scanner(System.in);


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

Zssaer1

還有一個我認為原理的錯誤:發牌時就相當與從中抽出一張牌,接下來就抽不到了。然而你這種發牌方法就有可能會重復抽到同一張牌,所以我認為應該在每一次發牌就從牌堆中刪除抽到的牌。
2019-03-09 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

花了一晚上寫的7-1的作業

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

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

幫助反饋 APP下載

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

公眾號

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