所以我有一个叫做PlayingCard的类,它创建了一个包含int秩和int花色(模拟扑克牌)的对象。
public class PlayingCard
{
private int rank;
private int suit;
public PlayingCard(int rank1, int suit1) //PlayingCard Constructor
{
rank = rank1;
suit = suit1;
}
public int getRank() //Get method to retrieve value of card Rank
{
if(rank >0 && rank <15)
{
return rank;
}
else
return 0;
}
public String getSuit() //Get method to retrieve value of card Suite
{
while (suit >0 && suit <5)
{
if (suit == 1)
{
return "Clubs";
}
else if (suit == 2)
{
return "Diamonds";
}
else if (suit == 3)
{
return "Hearts";
}
else
{
return "Spades";
}
}
return "Invalid suit";
}
@Override //Overrides default Java toString method
public String toString()
{
String strSuit = "";
switch(suit)
{
case 1: strSuit = "Clubs";
break;
case 2: strSuit = "Diamonds";
break;
case 3: strSuit = "Hearts";
break;
case 4: strSuit = "Spades";
break;
default: strSuit = "Invalid Suit";
break;
}
String output = getClass().getName() + "[suit = " +strSuit + ", rank = "
+rank + "]";
return output;
}
public String format() //Allows individual cards to be displayed in a
{ //Specific format.
String strSuit = "";
switch(suit)
{
case 1: strSuit = "Clubs";
break;
case 2: strSuit = "Diamonds";
break;
case 3: strSuit = "Hearts";
break;
case 4: strSuit = "Spades";
break;
default: strSuit = "Invalid Suit";
break;
}
return rank + " of " + strSuit + ", ";
}
@Override
public boolean equals(Object y) //Method for evaluating Object equality.
{
if (getClass() != y.getClass()) //Checks if both object are from the
{ //Same class.
return false;
}
if (y == null) //Checks if second object is empty or non-existent.
{
return false;
}
PlayingCard other = (PlayingCard) y;
return rank == other.rank && suit == other.suit;
}
}
然后我需要创建一个名为PackBuilder的程序,该程序应该模拟使用我的类构建一副卡片。
问题是我不知道如何给每个对象起一个新名字。我想到了类似这样的数组:
while(rank < 15)
{
PlayingCard cardDeck[1] = new PlayingCard(rank, suit);
}
但是它说cardDeck已经定义好了(我不确定我是否做得不对,或者使用数组是否不起作用)
我想要的命名方案类似于“card1”“card2”“card3”等等,直到我有52张牌,每张牌都有自己的套装/等级组合,以创建一副牌。
一副牌(为方便起见):
假设每套西装14张牌(我不知道确切的等级数,我假设14张)
给定等级和套牌,您可以通过cardDeck[(等级-1)*4(套牌-1)]
PlayingCard cardDeck = new PlayingCard[56];
int rank, suit, i = 0;
for(rank=1; rank<=14; rank++)
{
for(suit=1; suit<=4; suit++)
cardDeck[i++] = new PlayingCard(rank, suit);
}
你必须使用类吗?最好将此操作作为3个枚举的集合。您检查号码并返回西装字符串的get方法是各种错误的。如果Suite是一个枚举,您可以通过名称和数字(序数)来引用它。
两个嵌套循环是建筑部分的最简单解决方案。
然而,如果你想要一副命名的卡片,例如你可以说“if card==QueenOfSpades”,你就必须做一些更具创造性的事情,例如嵌套循环,从等级和西装中取名字,并将它们与中间的of连接起来。这就是这个问题的有趣之处:显然你不能这么做。不能以编程方式命名枚举。
这意味着您可以使您的甲板枚举具有52个命名元素,例如,DeuceOfSpades、DeuceOfHearts-on-up-to-AceOfSpades等。
另一种选择是对等级和西装进行枚举,然后让职业牌组生成卡片,并将它们放在里面,但有一种方法可以通过名称获得卡片,例如牌组。getAceOfHearts()。然后它也可以通过某种迭代器接口随机提供卡片,例如getNextCard()。
您每次都试图将一个PlayingCard
分配给cardDeck
数组中的第二个元素(索引1)。此外,cardDeck
数组会在每次循环的底部被立即丢弃。它的作用域仅限于存在于循环内部。
改变这个
while(rank < 15)
{
PlayingCard cardDeck[1] = new PlayingCard(rank, suit);
}
像这样的事情
PlayingCard[] cardDeck = new PlayingCard[52];
int i = 0;
while(rank < 15)
{
cardDeck[i++] = new PlayingCard(rank, suit);
}
要避免无限循环,请更改
cardDeck[i++] = new PlayingCard(rank, suit);
到
cardDeck[i++] = new PlayingCard(rank++, suit);
可能还有其他问题,但这是一个很好的开始。
问题内容: 刚接触React并尝试循环对象属性,但是React抱怨对象不是有效的React子对象,有人可以给我一些如何解决此问题的建议吗?我添加了createFragment,但不确定是否需要执行此操作或应该采用哪种方法? JS 渲染功能 控制台错误 问题答案: 问题在于您的使用方式,因为它总是会返回。您可能正在寻找返回新数组的方法: 如果仍然要使用,则必须执行以下操作: 更新: 如果您正在编写E
我试图从以下JSON对象数据中检索信息。json: 因此,我想循环这个JSON对象,以显示所有可用项及其相应的标题、说明和附件链接。 我知道我可以分别访问它们: 通常我会对数据进行for循环和循环。项目[i]。但是,由于这是一个react和一个对象,而不是一个数组,因此它的工作方式不同。 我当前的代码: 现在它只显示对象的第一个条目(因为它有const项目=data.items[0])我如何循环d
我将根据提供的键更新mongoose文档的一些字段。例如,当我们在JSON中呈现mongoose文档时。 和更新参数,如下所示。 当我这样运行mongoose api时。 它替换了整个地址对象,最终结果是 它只是替换地址字段,但我想只更新城市字段。这是理想的结果。 谢谢
问题内容: 我不确定这个问题是否与语言无关,因此我将以Java问题的身份提出。如果你有这样的循环 循环的每次迭代都在创建新的内存空间吗?如果是这样,是否要处理旧空间?如果没有,做这样的事情更有效吗 编辑:更新了代码以更好地说明问题 问题答案: 简短的答案:即使在Java中进行开发时,也不要理会这些事情,即使这些问题中的大多数都是由JVM自己处理的。 垃圾收集器将知道该怎么做,并将根据情况尝试做最好
我想修改实现特定接口的类实例的行为。修改由修改器对象执行。最终,原始类实例仍应保留其所有其他行为。设置如下: 接口和实现类如下所示: 有一些修改器类根据下面的psuedoCode工作。这是我想不明白的部分。 下面是一些示例代码,使用修饰符修改实现接口的对象上的行为。 是否有解决方案、软件设计模式或通用方法来完成此操作?这可能是一个完全错误的方式,但示范我应该做的将是一个很大的帮助。提前道谢!