Below is the syntax highlighted version of CouponCollector.java
from §1.4 Arrays.
/****************************************************************************** * Compilation: javac CouponCollector.java * Execution: java CouponCollector n * * Given n distinct card types, how many random cards do you need * do collect before you have (at least) one of each type? * This program simulates this random process. * * * % java CouponCollector 1000 * 6583 * * % java CouponCollector 1000 * 6477 * * % java CouponCollector 1000000 * 12782673 * ******************************************************************************/ publicclassCouponCollector{ publicstaticvoidmain(String[] args){ int n = Integer.parseInt(args[0]);// number of card types boolean[] isCollected =newboolean[n];// isCollected[i] = true if card i has been collected int count =0;// total number of cards collected int distinct =0;// number of distinct cards // repeatedly choose a random card and check whether it's a new one while(distinct < n){ int value =(int)(Math.random()* n);// random card between 0 and n-1 count++;// we collected one more card if(!isCollected[value]){ distinct++; isCollected[value]=true; } } // print the total number of cards collected System.out.println(count); } }