题目 一项抽奖活动要求读者从整数1-49之间选择6个不同的数字,生成5组结果。
怎么会有0输出啊???谢谢了public class  Test3
{
public static void main(String[] args) 
{
int numbers=6;   //定义生成数字的个数   //定义总共的组数
        int randomNumber=0;//定义随机生成的数字
for (int i=0;i<5 ; i++){
int number1=0;
int number2=0;
int number3=0;
int number4=0;
int number5=0;
int number6=0;     //生成的数字归0
int nNumbers=0;
randomNumber=0; for (int j=0;j<numbers ; j++){
randomNumber=(int)(49.0*Math.random())+1; switch (nNumbers){
case 0 :
number1=randomNumber;
nNumbers++;
break;
case 1 :
if (randomNumber!=number1 && randomNumber!=0){
number2=randomNumber;
nNumbers++;
break;
}
randomNumber=(int)(49.0*Math.random())+1;
continue;
case 2:
if (randomNumber!=number1 && randomNumber!=number2 && randomNumber!=0){
number3=randomNumber;
nNumbers++;
break;
}

randomNumber=(int)(49.0*Math.random())+1;
continue;

case 3:
if (randomNumber!=number1 && randomNumber!=number2 && randomNumber!=number3 && randomNumber!=0){
number4=randomNumber;
nNumbers++;
break;
}
randomNumber=(int)(49.0*Math.random())+1;
continue;

case 4:
if (randomNumber!=number1 && randomNumber!=number2 && randomNumber!=number3 && randomNumber!=number4 && randomNumber!=0){
number5=randomNumber;
nNumbers++;
break;
}
randomNumber=(int)(49.0*Math.random())+1;
continue;

case 5:
if (randomNumber!=number1 && randomNumber!=number2 && randomNumber!=number3 && randomNumber!=number4 && randomNumber!=number5 && randomNumber!=0){
number6=randomNumber;
nNumbers++;
break;
}
randomNumber=(int)(49.0*Math.random())+1;
continue;
case 6:
break;

} }
System.out.print("gruop"+(i+1)+"=");
System.out.println(number1+(number1>9?" ":"  ")+
                 number2+(number2>9?" ":"  ")+
 number3+(number3>9?" ":"  ")+
 number4+(number4>9?" ":"  ")+
 number5+(number5>9?" ":"  ")+
 number6+(number6>9?" ":"  ")+".");
} }
}

解决方案 »

  1.   

    第一randomNumber!=0 可以不要 它本身就是>=1在有 为什么会有0看一下逻辑
    case 1 : 
    if (randomNumber!=number1 && randomNumber!=0){ 
    number2=randomNumber; 
    nNumbers++; 
    break; 

    假如第2次取的值等于第一次随机出来的值那么 number2 的值就仍然为0 继续跳入下一个循环其他逻辑类似 你应该确定能取到6个不一样的随机值。i = 0;
    int number[] = new int[6];
    List l = new ArrayList();
    while(i<6){
     int j = (int)(49.0*Math.random())+1; 
    if(l.indexof(""+j) ==  -1){
    number[i] = j;
    i++;
     l.add(""+j);
    }
    }
      

  2.   

    一般情况下是这样写的:
    for (int j=0;j <numbers ; j++){ 
    randomNumber=(int)(49.0*Math.random())+1; 
    switch (nNumbers){ 
    case 0 : 
    number1=randomNumber; 
    nNumbers++; 
    break; 
    case 1 : 
    while(randomNumber==number1 || randomNumber==0){ 
    randomNumber=(int)(49.0*Math.random())+1; 
    }
    number2=randomNumber; 
    nNumbers++; 
    break; 
    注意看上面的程序,另外,你的程序写的太烂了吧?用个数组来做的话省不少笔墨呢!~算法设计地好点
      

  3.   

    是因为在你的switch (nNumbers){}语句中如果有重复值
    会使得number1到number6有可能没有进入
    if (randomNumber!=number1 && randomNumber!=0 ...){}
    这个判断里面去,
    而且这时nNumbers不会++使得numberX可能为初始值0
      

  4.   

    谢谢大家,我知道原因了,原来是continue不能用于switch啊,我初学啊,呵呵。