Java for loop / jvm坏了?!?内部循环中的递增运算符在1之后不会递增

时间:2014-10-16 12:52:50

标签: java jvm

在调试器和运行时中敲击最奇怪的代码。我有一个填充了60个对象的ArrayList。当我遍历此列表并检查内部卡片的唯一性时,增量运算符似乎不起作用?!

这是我的代码检查:

public boolean isPresentOnce(PlayingCard cardToCheck) {
    int foundTimes = 0;
    for (int i=0;i<playingCards.size();i++) {
        if (playingCards.get(i).equals(cardToCheck)) {
            foundTimes++;
            System.out.println("Found the card:"+foundTimes+":"+i);
        }
    }
    return foundTimes == 1;
}

我得到了这个输出:

Found the card:1:0
Found the card:1:1
Found the card:1:2
Found the card:1:3
<<SNIP>>
Found the card:1:56
Found the card:1:57
Found the card:1:58
Found the card:1:59

为什么我的计数器不会超过1?

我尝试清理我的工作区,尝试进行maven干净安装,使用+ = 1交替代码。并使用一个更复杂的双if语句。似乎没有什么工作,代码的这个角落似乎被打破了。使用double if语句时,return语句根本不会退出该方法。

更多辅助信息:

在运行10.9.5的MacBook Pro上使用带有JRE 1.6.0_65 64位的IntelliJ 13.1.5和HotSpot。

人口看起来像这样:

private ArrayList<PlayingCard> generateCards() {
    ArrayList<PlayingCard> cards = new ArrayList<PlayingCard>();
    for (int i = 0; i < 60; i++) {
        PlayingCard playingCard = new PlayingCard();
        List<CardImage> images = new ArrayList<CardImage>();
        images.add(new CardImage(TokenColor.Blue, TokenType.Book));
        images.add(new CardImage(TokenColor.Gray, TokenType.Chair));
        playingCard.addImages(images);
        cards.add(playingCard);
    }
    return cards;
}

为糟糕的代码道歉,这是一个爱好项目; - )

1 个答案:

答案 0 :(得分:-1)

所以,如果我理解正确的话,你想检查你的套牌中是否只有一张卡片?对?现在你对输出感到困惑吗?

所以输出就是:

Found the card:1:2

这意味着它找到了位置2的卡!,将计数器递增1,因此您得到了输出。

第一个是卡被找到的时间,第二个是列表中的位置。所以一切都很好!