2015-05-09 272 views
0

我对Java很新,我正在做一个任务。我需要通过一些卡片,确定它们是否都面朝上,如果他们都是,然后返回一个祝贺信息。在for语句中使用if语句

我正在研究通过卡循环的代码,以确定它们是否都面朝上。目前,代码在返回“true”之前似乎没有检查所有卡片。

是否有可能在for循环中使用if语句,或者我是否全都做错了?

public boolean checkAllMatchesFound() {  
    for (int i=0; i<MatchingGame.NUMBER_OF_CARDS; i++) { 
     if ((cards[i].isFacingUp()) == true); 
     return true; 
    } 

    return false; 
} 
+1

你的算法有点不合适,试着通过多一点思考你的逻辑。 – mcraen

+0

此方法测试是否至少有一张牌面朝上。如果这是作者的意图,那可能是完全没问题的。 –

回答

0

你有两个问题:

  1. 分号后,如果其java会当作空语句,因此不会检查条件。
  2. 即使在那之后,如果发现任何卡朝上,你将返回true,这与你所需要的矛盾,因此你的逻辑应该是:

    public boolean checkAllMatchesFound() {  
        for (int i=0; i<MatchingGame.NUMBER_OF_CARDS; i++){ 
          if (!cards[i].isFacingUp()) 
           return false; 
        } 
        return true; 
    } 
    
+0

谢谢。完美工作。 – SweetMello7

0

你在if语句后面有一个分号。删除它&它会工作。

public boolean checkAllMatchesFound() 
{  
    for (int i=0; i<MatchingGame.NUMBER_OF_CARDS; i++){ 
     if (cards[i].isFacingUp()) 
     return true; 
    } 
    return false; 
} 
+0

哦!我删除了分号,但在所有卡被检查之前它仍然返回true ... – SweetMello7

+0

您仍然会看到问题:“现在,代码在返回”true“之前似乎没有检查所有卡, “。 @ SweetMello7看到我的回答 – SMA

+0

这里的算法是不正确的,这将返回真正的是/任何/卡面朝上,不是如果他们都是 – tddmonkey

1

在这些情况下,您通常使用反逻辑。在你的情况下,只要卡片朝上,没有检查其他卡片,该方法就会返回true。因此:

public boolean checkAllMatchesFound() 
{  
    for (int i=0; i<MatchingGame.NUMBER_OF_CARDS; i++){ 
     if (!cards[i].isFacingUp()) 
     return false; 
    } 
    return true; 
} 
+0

这看起来像适当的算法,但是,我建议原在将这样的问题发布到Stack之前,这个问题的海报工作起来有点困难。我不是说这是一种侮辱,而是因为他们说......'教一个男人去钓鱼......' – mcraen

0

这是绝对有可能的。你的问题是,当你发现一张面朝上的卡片返回true。迭代所有卡后必须返回true/false。你可能不喜欢这一点 -

boolean isAllFacingUP = true; 
public boolean checkAllMatchesFound() 
{  
    for (int i=0; i<MatchingGame.NUMBER_OF_CARDS; i++){ 

     if (!cards[i].isFacingUp()){ 
     isAllFacingUp = false; 
     } 

} 
    return isAllFacingUP; 
} 
0

如果你可以使用Java 8,那么你可以利用流为你做所有这些。下面将返回你想要

Arrays.stream(cards).allMatch(card -> card.isFaceUp()); 

或者有什么使用方法参考:

Arrays.stream(cards).allMatch(Card::isFaceUp); 
0

你打开,如果loop.within您返回真中的其他部分关闭返回FALSE或否则你只需分配任何值的FacingUp()方法。