0

我需要帮助创建一个 ArrayList 并向它们添加一些整数。本质上,我有一个纸牌游戏,它可以拉出卡片然后保存 ID (BCID)。我想将这个拉取的 ID 添加到一个 ArrayList 中,这样我就可以避免两次拉取同一张卡。我的设置如下,但我不断重复。我知道卡片正确拉动,因为它显示一切正常 - 不幸的是,只是重复卡片。

您能提供的任何帮助都会很棒!我已尽力将相关部分包括在内。如果您需要更多信息,请告诉我。

public static Integer bcid1, bcid2, bcid3, bcid4, bcid5, bcdcid;
public static List<Integer> usedCards = new ArrayList<Integer>();

在下面的示例中,它应该检测重复然后初始化序列以绘制不同的卡片。

    public static void setIDs() 
{
    try 
    {
        bcid1 = Integer.parseInt(bc1);
        usedCards.add(bcid1);
    }
    catch(NumberFormatException nfe)
    {       }

    try 
    {
        bcid2 = Integer.parseInt(bc2);
        if (usedCards.contains(bcid2))
        {
            try 
            {
                blueCard2(ctx);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else
        {
            usedCards.add(bcid2);
        }
    }
    catch(NumberFormatException nfe)
    {       }

    try 
    {
        bcid3 = Integer.parseInt(bc3);
        if (usedCards.contains(bcid3))
        {
            try 
            {
                blueCard3(ctx);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else
        {
            usedCards.add(bcid3);
        }
    }
    catch(NumberFormatException nfe)
    {       }

    try 
    {
        bcid4 = Integer.parseInt(bc4);
        if (usedCards.contains(bcid4))
        {
            try 
            {
                blueCard4(ctx);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else
        {
            usedCards.add(bcid4);
        }
    }
    catch(NumberFormatException nfe)
    {       }

    try 
    {
        bcid5 = Integer.parseInt(bc5);
        if (usedCards.contains(bcid5))
        {
            try 
            {
                blueCard5(ctx);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else
        {
            usedCards.add(bcid5);
        }
    }
    catch(NumberFormatException nfe)
    {       }
}
4

2 回答 2

1

使用 HashSet 而不是 arraylist。集不允许重复。

于 2013-05-21T01:45:15.497 回答
0

首先考虑使用重复代码的方法,这样更容易在一个地方调试和调整,而不是到处乱跳。在这里,如果您想使用列表,请遵循以下内容。相应调整

编辑:看这不会有很多原因,因为 list.contains 仅当对象位于列表内时才返回 true,在您的解决方案中,您有两个具有相同内容的不同对象。你把这两种东西混在一起了。这是不一样的。所以你的函数只返回false。

我的代码更像是对您如何创建方法的建议,并希望您能在这方面做更多的工作。这些是基本的编程技能。我不想粗鲁,但这完全没有本论坛的目的。

希望这对您有所帮助并享受您的工作

于 2013-05-21T01:55:31.690 回答