所以我必须用java编写一个HiLo纸牌游戏程序,这里有关于它是如何工作的说明:
有两类Card和Deck
Card Class包含2个私有变量int suit和int faceValue 一个构造函数,它将2个变量作为参数,如下所示:
Deck类包含随机类型的私有随机变量 私人随机:随机 没有参数构造函数Deck() 不带参数和卡类型的交易方法
卡类有一套西装,从0到3的数字表示卡的套装: - 0代表黑桃(这是排名最高的西装) - 1代表红心(第二高的西装) - 2代表钻石(第三高的套装) - 3代表俱乐部(最弱的西装)
faceValue是1到13之间的值; 1代表Ace,11代表Jack,12代表Queen,13代表King。
compareTo方法将当前实例(即this)与参数卡进行比较。如果两个对象具有相同的套装和faceValue,则该方法返回0.如果当前实例更高(更高的值,或者它们是相同的值,更高的套装),则该方法返回一个正值(它可以是+ 1或任何其他正值,因为幅度不重要,只有符号)。如果当前实例较低,则返回负值。
toString方法返回卡片的String表示形式(例如“Ace of Spades”,“2 of Hearts”)
Deck类有一个Random类型的实例,它在什么时候使用 实例化和处理新卡。
现在编写一个名为HiLoApp的应用程序类,它将: - 实例化Deck对象 - 处理并显示第一张卡片 - 要求用户选择-1,如果他们认为下一张牌会更低,+1,如果下一张牌会更高,或者0则退出游戏 o处理并显示下一张卡片 o显示用户是否正确选择 o计算尝试次数和正确猜测
主要方法是连续执行这些步骤,直到用户输入0退出游戏。此时,显示用户的总尝试次数和正确的猜测。
卡片类:
public class Card
{
private int suit;
private int faceValue;
//Constructor
public Card(int suit, int faceValue)
{
this.suit = suits;
this.faceValue = faceValue;
card = deal(); //???
}
public int getSuit()
{
return suit;
}
public int getFaceValue()
{
return faceValue;
}
public int compareTo(Card card)
{
}
public String toString
{
String cardName = null;
switch (faceValue)
{
case 2:
cardName = "Two";
break;
case 3:
cardName = "Three";
break;
case 4:
cardName = "Four";
break;
case 5:
cardName = "Five";
break;
case 6:
cardName = "Six";
break;
case 7:
cardName = "Seven";
break;
case 8:
cardName = "Eight";
break;
case 9:
cardName = "Nine";
break;
case 10:
cardName = "Ten";
break;
case 1:
cardName = "Ace";
break;
case 11:
cardName = "Jack";
break;
case 12:
cardName = "Queen";
break;
case 13:
cardName = "King";
break;
}
switch (suit)
{
case 0:
cardName += "Of Spades";
break;
case 1:
cardName += "Of Hearts";
break;
case 2:
cardName += "Of Diamonds";
break;
case 3:
cardName += "Of Clubs";
break;
}
return cardName;
}
}
甲板上课:
import java.util.Random;
public class Deck
{
private Random random;
public Deck()
{
random = 0;
}
public Card deal()
{
while (num != 0)
{
random = new Random();
suit = random.nextInt(3);
faceValue = random.nextInt(13) + 1;
}
return //how to return suit and faceValue at the same time?
}
}
申请类:
import java.util.Random;
import java.util.Scanner;
public class HiLo
{
public static void main(String [] args)
{
//to quit the game
int num;
//getting input from user
Scanner keyboard = new Scanner(System.in);
Deck deck1 = new Deck();
= deck1.deal()
}
}
我的问题是:我不明白compareTo方法中的card参数来自何处。我之所以无法完全编写程序,也是因为我不明白它是如何工作的。第一张卡的初始交易在哪里发生?卡类是否可以访问Deck类以使用交易方法?我看到deal方法返回一个Card类类型但是如何同时返回suit和faceValue呢?
答案 0 :(得分:1)
我认为你的责任可能是错误的。卡片创建卡片,卡片根本不需要知道卡片。以这种方式思考 - 卡片可以在没有卡片的情况下存在。
所以在你的套牌构造函数中,你应该制作所有52张牌,并将它们保存在列表中。然后当你在牌组上调用deal
时,它会从列表中删除顶牌,并将其作为返回值给出。
对于compareTo
方法 - 通常会实现Comparable接口。然后,如果你有一张卡片列表,并想要对它进行排序,那么列表将一次两张卡片,然后进行比较。
答案 1 :(得分:0)
我不明白compareTo方法中的card参数来自哪里。
它来自您将要写的函数调用。例子:
Card card1 = deck.deal();
Card card2 = deck.deal();
if (compare (card1, card2)) ...
第一笔交易主要是你说deck1.deal()
。
Card类不需要使用交易方法,但HiLo会在deck1.deal()
时使用。
同时返回套装和faceValue的方法是返回一张卡片:
public Card deal()
{
...
Card result (suit, faceValue);
return result;
}
这确实是点有一个类(无论如何都是一个重点):把所有东西捆绑在一起。卡片是一套西装和一个faceValue。现在它存在,在任何需要的地方使用它,好吧,卡片。