当前位置: 首页 > 知识库问答 >
问题:

如何为循环中的对象提供新名称?

潘翰藻
2023-03-14

所以我有一个叫做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张牌,每张牌都有自己的套装/等级组合,以创建一副牌。

共有3个答案

顾曾笑
2023-03-14

一副牌(为方便起见):
假设每套西装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);    


}
皇甫通
2023-03-14

你必须使用类吗?最好将此操作作为3个枚举的集合。您检查号码并返回西装字符串的get方法是各种错误的。如果Suite是一个枚举,您可以通过名称和数字(序数)来引用它。

两个嵌套循环是建筑部分的最简单解决方案

然而,如果你想要一副命名的卡片,例如你可以说“if card==QueenOfSpades”,你就必须做一些更具创造性的事情,例如嵌套循环,从等级和西装中取名字,并将它们与中间的of连接起来。这就是这个问题的有趣之处:显然你不能这么做。不能以编程方式命名枚举。

这意味着您可以使您的甲板枚举具有52个命名元素,例如,DeuceOfSpades、DeuceOfHearts-on-up-to-AceOfSpades等。

另一种选择是对等级和西装进行枚举,然后让职业牌组生成卡片,并将它们放在里面,但有一种方法可以通过名称获得卡片,例如牌组。getAceOfHearts()。然后它也可以通过某种迭代器接口随机提供卡片,例如getNextCard()。

奚晟
2023-03-14

您每次都试图将一个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工作。这是我想不明白的部分。 下面是一些示例代码,使用修饰符修改实现接口的对象上的行为。 是否有解决方案、软件设计模式或通用方法来完成此操作?这可能是一个完全错误的方式,但示范我应该做的将是一个很大的帮助。提前道谢!