[JAVA]数组 求代码解释

求代码解释

public class CouponCollector {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);

boolean[] found = new boolean[N];

int cardcnt = 0;

int valcnt = 0;

    while (valcnt < N) {
        int val = (int) (Math.random() * N);   
        cardcnt++;                             
        if (!found[val]) valcnt++;             
        found[val] = true;                    
    }


    System.out.println(cardcnt);
}

}

这个代码有问题,无法正常运行

 public static void main(String[] args) {
        int N = Integer.parseInt(args[0]);//class执行的时候输入的最大值

        boolean[] found = new boolean[N];//初始化N维布尔型数组,初始值是false

        int cardcnt = 0;

        int valcnt = 0;
        while (valcnt < N) {//看着像是进行什么牌初始化,一直摇初始化N张
            int val = (int) (Math.random() * N);   //随机获取一个0-(N-1)的整数
            cardcnt++;     //没循环一次加1                        
            if (!found[val]) valcnt++; //如果没有获取过Val这个整数,则该数字有效,数量加一
            found[val] = true; //该数字所对应的状态设为true,表示该数字已经初始化过,与if (!found[val]) valcnt++时使用
        }


            System.out.println(cardcnt);//初始化完成,循环的总次数
    }

found[]数组随机赋值为true;

2楼已经给出了详尽的解释,这段代码要实现什么功能呢,亲