2011-11-22 193 views
2
public void PlayforMe() 
{ 
    for (int i=game.size()-1;i>=1;i--) 
    { 
     Card a = game.get(i); 
     Card b = game.get(i-1); 
     if (a.getSuit().equals(b.getSuit()) | (a.getCardNum().equals(b.getCardNum()))) 
     { 
      game.remove(b); 
      break; 
     } 
    } 

    for (int j=game.size()-1;j>=3;j--) 
    { 
     Card c = game.get(j); 
     Card d = game.get(j-3); 
     if (c.getSuit().equals(d.getSuit()) | (c.getCardNum().equals(d.getCardNum()))) 
     { 
      game.set(j-3,game.get(j)); 
      game.remove(j); 
      break; 
     } 
    } 
} 

我已经为我在Java代码中制作的单人纸牌游戏编写了这段Java代码。我对这门语言(以及一般的编程)非常陌生。我有一个arrayList为我的套牌和arrayList为我的'游戏'。在这种方法/移动中,我拥有它,所以它会发现最接近发卡末尾的卡片,如果卡片或卡片号码相同,则直接在卡片前面与卡片“交换”。如何实现具有两个循环的条件

如果这个举动并不是卡片发出的选项,那么我需要它通过第二个循环,找到最接近发牌结束的卡片,然后用卡片[3]之前的卡片“交换”如果西装或卡号是相同的。

他们单独工作,但我不能得到一个条件工作(例如我已经尝试过的if语句),将通过第一个循环,如果它没有成功地删除一张卡,它将通过第二个循环。

该方法应该只执行一个步骤,如果满足条件,则优先将卡移动到卡上(之前)。我可以做到这一点,所以它会经历两个循环(即把这段代码放到两个方法中,并从我的菜单中调用它们),但是我需要它执行第一个循环,并且只有在第一个循环结束时才执行第二个循环不成功(即卡b不删除/ game.remove(b);不叫)

如果任何人有任何建议,我会感激:)

回答

0

你想要把Boolean finished = false;在功能开始,然后finished = true完成。然后把if (finished) { ... }放在第二个循环中。

或者在完成时在第一个循环中输入return。这将返回你的函数并且不再执行任何代码。虽然有些人认为这种不好的风格。

+0

谢谢,那个工作出色^^ – DanMc

0

如果第一个for环路成功,return而不是break ing。

+0

小心*早日返回狂热分子*!他们会为你而来! – trojanfoe

+0

@trojanfoe:我想我倒在另一个阵营。你碰巧有一个参考文件解释了为什么早期“返回”是一件坏事? – John

+1

@John:不要误解我的意思 - 我不在他们的阵营,并且经常使用早期的回报。我只是从这里的经验中得知,一些新手编码人员会为最小的违规行为倒解答。 – trojanfoe