你的问题在switch(rnd.nextInt(3))这 
在java的API文档中nextInt()这个方法是这么定义的 
  public int nextInt(int n) 
返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。nextInt 的常规协定是,伪随机地生成并返回指定范围中的一个 int 值。所有可能的 n 个 int 值的生成概率(大致)相同。Random 类按如下方式实现 nextInt(int n) 方法:  
 public int nextInt(int n) { 
     if (n<=0) 
                throw new IllegalArgumentException("n must be positive"); 
     if ((n & -n) == n)  // i.e., n is a power of 2 
         return (int)((n * (long)next(31)) >> 31); 
     int bits, val; 
     do { 
         bits = next(31); 
         val = bits % n; 
     } while(bits - val + (n-1) < 0); 
     return val; 
  } 
前面的描述中使用了不确定的词“大致”,因为 next 方法只是一个大致上独自选择位的无偏源。如果它是一个随机选择位的最佳源,那么给出的算法应该从规定范围完全一致地选择 int 值。  
该算法稍微有些复杂。它拒绝那些会导致不均匀分布的值(由于 2^31 无法被 n 整除)。某个值被拒绝的概率取决于 n。最坏的情况是 n=2^30+1,拒绝的概率是 1/2,循环终止前的预计迭代次数是 2。  
 
该算法特别对待 n 是 2 的次幂的情况:它从底层伪随机数生成器中返回正确的高位数。在不是特殊处理的情况中,将返回正确的低 位数。众所周知,线性同余伪随机数生成器(比如此类所实现的)在其低位的值序列中周期较短。因此,如果 n 是 2 的次幂(幂值较小),则这种特殊情况将大大增加此方法的后续调用所返回的值序列长度。  
参数: 
n - 要返回的随机数的范围。必须为正数。  
返回: 
下一个伪随机数,在此随机数生成器序列中 0(包括)和 n(不包括)之间均匀分布的 int 值 
 |