這是我第一次在論壇上發帖,我不完全確定我的問題是否有效,但我會盡量具體並遵循指導原則。遵循指導原則,這是一個基於班級作業的問題。這項任務是創建一個代表一副牌並添加幾個特徵的'甲板'對象的代碼。我目前被困在這個過程中。無法讓卡片/卡片目標程序正常工作
我的問題就在於這個代碼中:
public class SilasAlmgrenS6L1CardCreate {
public static void main(String args[]) {
Deck d = new Deck();
d.shuffle();
Hand f = new Hand(d); //Returns error 'Hand cannot be resolved to a type'
}
public static class Deck {
Card[] cardArray = new Card[52];
Deck() { //constructor
int suits = 4;
int cardType = 13;
int cardCount = 0;
for (int i = 1; i <= suits; i++)
for (int j = 1; j <= cardType; j++) {
cardArray[cardCount] = new Card(i, j);
cardCount++;
} //End loop
} //End deck() constructor
////////////////////////////////////////////////////////
//My code starts here
public class Hand {
Hand(Deck a) {
Card[] Hand = {a.cardArray[0], a.cardArray[1], a.cardArray[2], a.cardArray[3], a.cardArray[4]};
Card[] playerHand = {Hand[0], Hand[1]};
System.out.println("You have " + playerHand[0] + " and " + playerHand[1]);
} //End hand constructor
} //End hand class
public void shuffle() {
//Runs loop for the length of the deck
for(int i = 0; i < cardArray.length; i++) {
int num = (int) (Math.random() * (51 - 0)) + 0; //Creates a random number between 0 and 51; used to shuffle
Card placeHolder = cardArray[i]; //Picks a place holder card from the deck
cardArray[i] = cardArray[num]; //Picks two random cards and make them equal
cardArray[num] = placeHolder; //Assigns one of the duplicate cards to the placeholder value
} //End for
} //End shuffle
//And ends here
/////////////////////////////////////////////////
public void print() {
for (int i = 0; i < cardArray.length; i++)
System.out.println(cardArray[i]);
} //End print loop
} //End print class
public static class Card {
String suit, name;
int points;
Card(int n1, int n2) {
suit = getSuit(n1);
name = getName(n2);
points = getPoints(name);
} //End card class
public String toString() {
return "The " + name + " of " + suit;
} //End toString
public String getName(int i) {
if (i == 1) return "Ace";
if (i == 2) return "Two";
if (i == 3) return "Three";
if (i == 4) return "Four";
if (i == 5) return "Five";
if (i == 6) return "Six";
if (i == 7) return "Seven";
if (i == 8) return "Eight";
if (i == 9) return "Nine";
if (i == 10) return "Ten";
if (i == 11) return "Jack";
if (i == 12) return "Queen";
if (i == 13) return "King";
return "error";
} //End getName String
public int getPoints(String n) {
if (n == "Jack" || n == "Queen" || n == "King" || n == "Ten")
return 10;
if (n == "Two")
return 2;
if (n == "Three")
return 3;
if (n == "Four")
return 4;
if (n == "Five")
return 5;
if (n == "Six")
return 6;
if (n == "Seven")
return 7;
if (n == "Eight")
return 8;
if (n == "Nine")
return 9;
if (n == "Ace")
return 11;
return -1;
} //End int getPoints
public String getSuit(int i) {
if (i == 1) return "Diamonds";
if (i == 2) return "Clubs";
if (i == 3) return "Spades";
if (i == 4) return "Hearts";
return "error";
} //End getSuit String
} //End Deck class
}
大部分此類項目已經具備了任務,但我們要增加幾個功能。這些功能中的第一個功能是一種洗牌方法,我可以做到。在下一個功能中,我們將創建一個'Hand'類,向用戶交付一張牌並計算他們有多少點,就好像它是一個二十一點遊戲。 這是這一步的確切用詞是:
'添加一個包含5個卡片引用數組的Hand類。讓程序處理兩手牌並將其顯示給用戶。告訴用戶他們有多少分,並詢問他們是否需要另一張卡。繼續允許玩家添加卡,直到他們達到5張卡或總數大於21張。「
我已經通過幾種方式,我覺得我可以創建這個類,但似乎沒有工作。目前的迭代與我已經接近。不過,我目前很難過。我的問題是;我不知道爲什麼當我嘗試使用Hand類時出現類型錯誤,但我不知道如何實現getPoints()方法。創建Hand類後有幾個步驟,但如果我能弄清楚如何使這個類工作,我相信我可以通過它們。我處在我的牆上打孔的邊緣,所以任何幫助修復這個代碼都是絕對值得讚賞的。
?使代碼不易讀。稍後嘗試你的代碼 – Stefan
編輯我的答案,如果你需要更多的解釋請問。這是一個有用的例子,但是沒有理解的複製只會給未來帶來更多的問題;) – Stefan
'公共靜態類Hand'用於內部類而不需要SilasAlmgrenS6L1CardCreate對象。或者一個單獨的文件。 –