if语句中的布尔运算符表示时髦

时间:2012-12-18 04:39:22

标签: java

我一直坐在这里试图围绕这段代码的运行方式。我理解(或者我认为我理解)布尔运算符如何在if语句中工作,但显然我没有。代码是:

public class Exercise_6_24 {
  public static void main(String[] args) {
        final int NUMBER_OF_CARDS = 52;
        String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
        String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9",
          "10", "Jack", "Queen", "King"};
        // found indicates whether a suit has been picked
        boolean[] found = new boolean[4]; 

        // Count the number of picks
        int numberOfPicks = 0;

        // Count occurrence in each suit
        int count = 0;
        while (count < 4) {
          numberOfPicks++;
          int index = (int)(Math.random() * NUMBER_OF_CARDS);
          if (!found[index / 13]) {
            found[index / 13] = true;
            count++;

            String suit = suits[index / 13];
            String rank = ranks[index % 13];
            System.out.println(rank + " of " + suit);
          }
        }

        System.out.println("Number of picks: " + numberOfPicks);
      }
}

这基本上就是选卡问题之一。我感到困惑的部分是while循环中的第一个if语句。在循环之前,找到的布尔数组中的所有槽都设置为false。然而,while循环中的if语句测试找到的boolean数组是否设置为true,如果为true,则运行if语句中的代码。它不应该运行,但确实如此。当我在那里设置断点时,我看到布尔数组槽从false变为true,以使if语句中的代码运行。

我真的不明白这是怎么回事。有人可以向我解释这是怎么回事吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

你没有测试它是否属实,你正在测试它是否是假的。这句话:

!found[index / 13]

意思是:

  

found[]处取index / 13的位置,并测试它是否 true

!是布尔补码,因此它会反转该值。如果found[index / 13]false,则!found[index / 13]true,因此if语句将会运行。

答案 1 :(得分:2)

if (!found[index / 13]) {

将此读为“如果此卡找到”。它正在检查值是否为 false ,因为只有这样才会找到[..]为真,并且if块将会执行。