我正在尝试获取一块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);
}
答案 0 :(得分:2)
关于你的第二个问题:
正如Jurfer所提到的,你不需要递归。您需要遵循以下四个简单步骤:
检查代码:
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;
}