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

如何根据对象的条件从java中的数组列表中返回(和删除)对象

夏弘义
2023-03-14

上课我需要做一个纸牌游戏(桥牌)。

我有一个Card类,它定义了一张卡的所有属性,还有一个Deck类,它生成了52张卡。还有一个手牌类,它可以将牌从牌组随机分配给四只手牌。

现在我需要制作一个方法,将玩家的手牌和目标牌作为输入,并返回该牌中排名最高的牌。我有:

private Card highestRankofSuit(ArrayList<Card> hand, char suit)
{
    ArrayList<Card> cardsOfSuit = null;
    for(int i = 0; i < hand.size(); i++)
    {
        if (hand.get(i).getSuit() == suit)
        {
            cardsOfSuit.add(hand.get(i));
        }
    }
    return cardsOfSuit(max(Card.getBridgeRank()));  //This is wrong because it only returns one int

}

我该怎么做才能返回所需的卡片?此外,我还需要知道如何从ArrayList中删除特定的Card对象(基于有关卡片的信息,例如它的等级和花色,但事先不知道它在ArrayList中的位置)。

第一次在这里发帖,谢谢你的帮助!

共有3个答案

郜彬
2023-03-14

我要做的第一个修改是使用遍历arraylist的for-each循环,这样就不必进行太多的get调用。我们确实需要了解getBridgeRank()方法的作用。你是否也在使用想要使用数学。max()方法还是您自己的max方法?

private Card highestRankofSuit(ArrayList<Card> hand, char suit)
{
    ArrayList<Card> cardsOfSuit = null;
    for(Card c : habd)
    {
        if (c.getSuit() == suit)
            cardsOfSuit.add(c);
    }
    return cardsOfSuit(max(Card.getBridgeRank())); 
}
邢英奕
2023-03-14
private Card highestRankofSuit(ArrayList<Card> hand, char suit){
  ArrayList<Card> cardsOfSuit = null;
  int maxIndex = 0;
  int maxCardNum = 0;

for(int i = 0; i < hand.size(); i++)// for loop1{
            if (hand.get(i).getSuit() == suit) {
                if(hand.get(i).getNumberOnCard() > maxCardNum){
                      maxIndex = i;
                      maxCardNum = hand.get(i).getNumberOnCard();
                }
            }
        }
return hand.get(maxIndex);

}
  • 检查卡片的花色是否正确
  • 检查它的数量是否高于当前找到的最大数量
  • 如果是:保存手牌的索引ArrayList并保存卡上数字的值,以便if可以与下一张卡进行比较
司徒浩思
2023-03-14

要返回相关的卡,您需要遍历此套装中的所有卡并找到最大的一张,以及此最大卡的索引。一旦您检查了所有这些,请返回值最高的卡。我认为这就是您想要的(因为您还没有提供所有代码)。

int max = -1;
int maxCardIndex = -1;
int i;
for(i = 0; i < cardsOfSuit.size(); i++) {
    int cardVal = cardsOfSuit.get(i).getBridgeRank();
    if( cardVal > max) {
       maxCardIndex = i;
    }
}
return cardsOfSuit.get(maxCardIndex);

要取出一张卡,只需在手上的所有卡上循环,检查卡的详细信息,然后在满足要求的情况下将其取出。(您需要对此进行更新,但它给出了一个示例)。

for(int i = 0; i < hand.size(); i++) {
    Card currentCard = hand.get(i);
    /* Check for what conditions you want to match in this if statement */
    if(currentCard.foo = "bar") {
       hand.remove(i);
    }
}
 类似资料:
  • 问题内容: 给定一个n个对象数组,假设它是一个string数组,并且具有以下值: 如何删除/删除数组中所有等于“ a”的字符串/对象? 问题答案: [如果需要一些现成的代码,请滚动到我的“ Edit3”(剪切后)。其余的供后代使用。] 为了充实清洁工的想法: 编辑:我现在使用而不是:单例仅限于一个条目,而该方法允许你添加其他字符串以稍后过滤:。 Edit2:以上方法保留了相同的数组(因此数组的长度

  • 问题内容: 我想从Java中删除符合条件的元素。 即: 我能理解为什么这行不通,但是什么是这样做的好方法? 问题答案: 您必须使用和来迭代迭代器(而不是列表)的功能: 注意,迭代器#删除功能被认为是optionnal,但它 是 由ArrayList的迭代器来实现。 这是ArrayList.java中此具体功能的代码: 这行代码就是为什么在迭代时使用它时不会抛出异常。

  • 问题内容: 我的代码有一个问题,我做了一个示例程序来显示链接列表中的emp详细信息,现在当我尝试删除特定条目时出现问题意味着它无法正常工作,希望我在代码中犯了一些错误你能建议怎么做吗? 问题答案: 您无法在列表(添加,删除…项目)上进行迭代操作。您必须使用迭代器 参见http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.html

  • 假设我有一个雇员对象列表,每个雇员类都有雇员姓名、雇员地址、工资等属性。现在我必须删除名称为“John”和Salary的雇员对象 列表empList=new ArrayList 根据我的理解,若要解雇具有上述情况的员工,我应使用以下代码: 因此,基本上上述代码将从列表中删除所需的Employee对象。如果我的理解正确,请告诉我。 除此之外,请澄清以下几点:1.当我们有数百万条记录时,我们将如何解决

  • 问题内容: 试图从基于某些属性的对象列表中删除重复项。 我们可以使用Java 8以简单的方式做到吗 我们可以根据员工的财产从中删除重复项吗?我看到过从字符串arraylist中删除重复字符串的帖子。 问题答案: 你可以从获取流并将其放入其中,从中提供一个唯一比较ID的自定义比较器。 然后,如果你确实需要一个列表,则可以将该集合放回到ArrayList中。 给出示例: 它将输出: 另一个想法可能是使

  • 问题内容: 如果我需要从List中删除一个对象(假设字符串“ abc” linkedList或ArrayList),则可以删除哪一个?(我认为两者都是相同的) ,如果我使用Linkedlist和arraylist,那么时间和空间的复杂度是多少 (我相信两者的时间复杂度都为O(n)相同) 问题答案: 两者都具有相同的时间复杂度-O(n),但是恕我直言,该版本会更快,尤其是在大型列表中,因为当您从数组