在java中理解boolean!array [i]

时间:2012-02-19 05:24:33

标签: java boolean default

http://introcs.cs.princeton.edu/java/14array/CouponCollector.java.html

好的,据我所知,如果

boolean[] found = new boolean

未初始化,它被赋予默认的布尔值,即false。但由于false的negatron是真的(!found[val]),当所有布尔值都设置为默认值(false)时,这个条件是如何工作的呢?提前谢谢。

4 个答案:

答案 0 :(得分:2)

检查后,无论发生什么情况,found[val]都设置为true。所以if (!found[val])基本上意味着“如果我之前没有见过val。”

最终结果是valcnt最终成为唯一val的计数。

答案 1 :(得分:2)

这里没有神秘感。我想你只是没有仔细阅读代码。以下是相关摘录及其“含义”。

    boolean[] found = new boolean[N];    // found[i] = true if card i has been collected

found的所有元素最初都是错误的。 (评论记录了found数组的不变量。)

    if (!found[val]) valcnt++;

如果!found[val]为真(即found[val]仍然为假),请递增计数器......

    found[val] = true;

...并将found[val]设置为true,以便我们不再计算此值。

答案 2 :(得分:0)

第一次有假。

int val = (int) (Math.random() * N);

这会产生一个随机数,所以在这个循环中可能会产生多于一个的五个。当第一次生成5时found[5]为假,但第二次是真的,因此条件为假,不再会达到valcnt++;

答案 3 :(得分:0)

因为'val'是0到N-1之间的随机整数。在while循环中可能会出现两次相同的值,并且您希望仅在该索引处找到一次更新。