我在這方面的水平不是很高,這是我第一次真正使用物件和類。我正在嘗試制作紙牌游戲,并希望使用 Java 顏色代碼將卡片的套裝名稱著色為紅色或黑色。每張牌都是它自己的物件,有一套花色和一個數值。這是“卡片”類:
public class Card {
String suit = Main.generateCardSuit();
int value = Main.generateCardValue();
**if(suit.equals("Spades") || suit.equals("Clubs")){
String cardColor = Colors.WHITE;
} else {
String cardColor = Colors.RED;
}**
String cardDisplay = value ", " cardColor suit Colors.RESET;}
Main 類中確定花色和值的方法:
` public static String generateCardSuit() {
String cardSuit = "0";
int suitDeterminer = (int) Math.ceil(Math.random() * 4);
switch (suitDeterminer) {
case 1:
cardSuit = "Spades";
break;
case 2:
cardSuit = "Clubs";
break;
case 3:
cardSuit = "Hearts";
break;
case 4:
cardSuit = "Diamonds";
break;
}
return cardSuit;
}
public static int generateCardValue() {
int gameValue = (int) Math.ceil(Math.random() * 13 1);
return gameValue;
}`
Card類的使用方式:
public static void printUserHand(ArrayList < Card > userHand) {
for (int i = 0; i < userHand.size(); i ) {
System.out.println(i ": " userHand.get(i).cardDisplay);
}
}
public static void main(String[] args) {
ArrayList < Card > userHand = new ArrayList < Card > ();
for (int i = 0; i < 7; i ) {
userHand.add(new Card());
}
for (int i = 7; i > 0; i--) {
Card gameCard = new Card();
System.out.println("The dealer turns up a: " gameCard.cardDisplay "\n");
...
So i need each cards color to be an attribute, but the bolded IF statement I have in the object doesnt work. Based on how my code is working, I dont know of a way that it could go in the Main class without causing a lot of other problems.
uj5u.com熱心網友回復:
你的Card類有一個嚴重的問題:它根本不是一個類,它試圖在方法之外執行代碼。
給它一個名為的私有欄位cardDisplay并在Card. 添加一個方法來檢索 cardDisplay 的值:
private final String cardDisplay;
public Card() {
// put all the code from your version of Card here
this.cardDisplay = cardDisplay;
}
public String getCardDisplay() {
return cardDisplay;
}
如果您跳過代碼中的宣告(這是您指定區域變數型別的地方),您甚至可以保存一行
cardDisplay = value ", " cardColor suit Colors.RESET;
只是不要跳過不能作為欄位使用的真實區域變數的宣告,比如可能cardColor.
uj5u.com熱心網友回復:
您提到的是這段代碼不起作用:
**if(suit.equals("Spades") || suit.equals("Clubs")){
String cardColor = Colors.WHITE;
} else {
String cardColor = Colors.RED;
}**
此代碼在每個塊內創建一個名為的變數color,但隨后該變數被丟棄而沒有對其進行任何處理。如果您的程式編譯,即使您有代碼:
String cardDisplay = value ", " cardColor suit Colors.RESET;
那么這意味著呼叫cardColor該行正在訪問的變數不是您在代碼中使用 if 陳述句有條件地分配顏色的變數。您現在遇到的問題的解決方案是確定cardColor正在訪問的行中呼叫的變數,String cardDisplay =并確保該變數是根據您的 if 陳述句塊中的套裝修改的變數。
uj5u.com熱心網友回復:
有一個名為 Color 的資料型別,您可能想嘗試設定Color cardColor = Color.yourColor然后將此值直接用作您的顏色與 cardColor。
編輯以包括解決方案:
if(suit.equals("Spades") || suit.equals("Clubs")){
Color cardColor = Colors.WHITE;
} else {
Color cardColor = Colors.RED;
}
如果你剛開始,你可能想看看這個串列,還有很多其他資源: https ://docs.oracle.com/javase/7/docs/api/overview-summary.html
uj5u.com熱心網友回復:
您需要更多地考慮面向物件:
首先創建一些列舉,我建議使用 Suit 和 FaceValue 列舉:
public enum Suit {
SPADE(Color.BLACK, "Spades"),
CLUB(Color.BLACK, "Clubs"),
HEART(Color.RED, "Hearts"),
DIAMOND(Color.RED, "Diamonds");
private Color color;
private String displayValue;
public Color getColor() {
return color;
}
private Suit(Color color, String displayValue) {
this.color = color;
this.displayValue = displayValue;
}
public String toString() {
return displayValue;
}
}
public enum FaceValue {
TWO("2"),
THREE("3"),
FOUR("4"),
FIVE("5"),
SIX("6"),
SEVEN("7"),
EIGHT("8"),
NINE("9"),
TEN("10"),
JACK("J"),
QUEEN("Q"),
KING("K"),
ACE("A");
private String displayValue;
private FaceValue(String displayValue) {
this.displayValue = displayValue;
}
public String toString() {
return displayValue;
}
}
然后是卡片類:
public class Card {
private Suit suit;
private FaceValue value;
public Card(Suit suit, FaceValue value) {
this.suit = suit;
this.value = value;
}
public Suit getSuit() {
return suit;
}
public FaceValue getValue() {
return value;
}
public String toString() {
return value " of " suit;
}
}
Then you can create a deck class with basic functionality.
public class Deck {
private List<Card> cards = new LinkedList<Card>();
public Deck() {
init();
shuffle();
}
public void init() {
cards.clear();
for (Suit suit : Suit.values()) {
for (FaceValue faceValue : FaceValue.values()) {
cards.add(new Card(suit, faceValue));
}
}
}
public void shuffle() {
Collections.shuffle(cards);
}
public Card drawCard() {
return cards.remove(0);
}
public boolean hasCards() {
return !cards.isEmpty();
}
public static void main(String [] args) {
Deck deck = new Deck();
while (deck.hasCards()) {
System.out.println(deck.drawCard());
}
}
}
From there you can create games and such. A player could have a Hand of Cards. Then it's all just a matter of adding rules.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/442135.html
上一篇:訪問嵌套物件中的特定值
