Java卡片组

时间:2016-01-07 15:37:18

标签: java eclipse

我正在尝试获取一块Java来返回卡片中卡片总值的总和。使用10张不同值的卡片的测试数据我应该得到结果64但是我得到的随机答案大约是73但是每次运行它都会稍微改变。任何人有任何想法为什么?我也对程序的一部分感到困惑,因为我试图返回一个特定西装的所有卡片阵列(在测试案例中它的心脏)。如果我的代码非常混乱或完全错误,因为我只是一个初学者哈哈。所有的方法和内容都已经由我的讲师完成,我只是试图让某人向我展示方法的正确方向。

提前致谢。

第一个问题

public int totalPack() {

    int total = 0;
    for ( int i = 0; i < pack.size(); i++){
        total = total + pack.get(i).getNumber() ;
         }
    return total;
    }

结束

第二个问题

public ArrayList<Card> findSuit(String suit) {

    for ( int i = 0; i < pack.size(); i++){
        if (pack.get(i).getSuit().equals(suit)){
    return null;
        }
        else return ???;
    }

    return findSuit(suit);

}

2 个答案:

答案 0 :(得分:2)

关于你的第二个问题:

正如Jurfer所提到的,你不需要递归。您需要遵循以下四个简单步骤:

  • 创建一个新的ArrayList
  • 迭代所有卡片
  • 检查每张卡是否属于所需的套装,如果是,请将其添加到ArrayList
  • 返回ArrayList。

检查代码:

public ArrayList<Card> findSuit(String suit) {

  // 1. Create a new ArrayList   
  ArrayList<Card> list = new ArrayList<>();

  // 2. Iterate over the cards
  for ( int i = 0; i < pack.size(); i++){
    // 3. If the card is of the desired suit  
    if (pack.get(i).getSuit().equals(suit)){
         // add it to the list
         list.add(pack.get(i));
    }
    // 4. Return the ArrayList
    return list;
    }

答案 1 :(得分:1)

对于第一部分,我们需要查看其余的代码。

至于第二部分:

首先,如果你的包装尺寸等于0,你需要改变你的回报,你有:

return findSuit(suit);

如果遇到这种情况,你将陷入无限递归并获得某种溢出错误。您应该刚刚向控制台返回了一些内容,或者在此处抛出错误,说包装尺寸无效,下面是更好的解决方案。

然后,为了解决您的问题,我建议实例化一个新的ArrayList并将其称为suitMatchList(或任何您认为相关的内容),当您在包中查看的卡与您想要的套装匹配时,将其添加到新的ArrayList&lt ;&gt;,你不需要else语句,你还需要删除for循环中的返回值,因为它只会循环一次。你好像试图通过循环和递归的混合解决这个问题,但两者都混淆了。使用其中一种。

然后,一旦for循环完成,您就可以返回这个新的ArrayList&lt;&gt;。

希望这会有所帮助。试一试,如果你仍然被卡住,请告诉我,我会添加一些代码。

修改

我已经添加了以下代码,但仍然先尝试一下:) 我刚刚在没有IDE的情况下把它写在了我的头顶,所以它可能在语法上不正确,但我认为它是正确的。

public ArrayList<Card> findSuit(String suit)
{
    ArrayList<Card> matchSuitList = new ArrayList<Card>();

    for (int i = 0; i < pack.size(); i++)
    {
        if (pack.get(i).getSuit().equals(suit))
        {
            matchSuitList.add(pack.get(i));
        }
    }

    return matchSuitList;
}