提问java双色球问题

2024-11-26 17:34:10
推荐回答(2个)
回答1:

哥们,你们这个双色球,说实在的,水平真的不怎么样,简单的问题,搞得复杂化了……
看了一会,首先,第一个例子,结果也不太正确,可能是要求的不一样吧,
balls[balls.length-1] = pools[rd.nextInt(16)];这句话会取到之前已经取到过的值。

算了,切入正题,你的错误在于
for(int i=0;i!=balls.length;i++){//这里有变化
int index = rd.nextInt(pools.length);
if(used[index]) // ①
continue;
balls[i] = pools[index]; // ②
used[index] = true;
}
当if条件为true是,也就是说这个值,已经被取出来过,这个时候,你的程序仍旧会执行i++,
这就是你错误的地方,你想啊,当if条件为true时,意味着什么,意味着balls[i]应该继续取值,而你的程序实际上是没有继续给balls[i]继续取值,而是执行了i++,所以balls[i]的值,也就为null了

,而上面的程序,它的i++是什么时候执行的呢,是在if条件为false的时候执行的,所以可以保证每个balls[i]都有值

不知道你理解了没有,简单的说,就是假如i值为2的时候,条件if(used[index])为true,此时不能让 i++,而是保持 i 的值不变,继续为它取值,而你的程序则是让i++了,所以 i 的值变为3 了,这样,I 为2的地方的值就为null了

好了,这种问题最好是自己能找出来错误,不然很难提高自己的查错能力

还不懂的话,追问我

回答2:

.区别大了
if(used[index])
continue;
看见这2句没??
上边这个条件如果为真的话就会跳过底下的语句不执行所以又得时候i++这个是不会被执行了
你下边那个i++一定会被执行..所以
其实这个用ArrayList做比数组要好的多的多..把选出来的号码直接从ArrayList里删除 超简单..