Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我试图避免重复在我的彩票行(如果数字35是在第一个彩票行,那么它一定不能在第二行)_Java - Fatal编程技术网

Java 我试图避免重复在我的彩票行(如果数字35是在第一个彩票行,那么它一定不能在第二行)

Java 我试图避免重复在我的彩票行(如果数字35是在第一个彩票行,那么它一定不能在第二行),java,Java,我尽量避免在我的彩票行重复,即如果数字35是在第一个彩票行,那么它一定不能在第二行 我不明白为什么我一直在重复我添加了一个图像,可以更好地解释我的问题? 解决这个问题的最好办法是什么? 我已尝试将nt lottoTal=rand.nextInt(35)+1更改为nt lottoTal=rand.nextInt(34)+1 公共类LottoCanvas扩展边框窗格{ 私人帆布; 私有图形上下文gc; 私人文本; 私人文本文本额外/// 私人彩票; 私家乐透// 随机兰德; 公共LottoCanva

我尽量避免在我的彩票行重复,即如果数字35是在第一个彩票行,那么它一定不能在第二行 我不明白为什么我一直在重复我添加了一个图像,可以更好地解释我的问题? 解决这个问题的最好办法是什么? 我已尝试将nt lottoTal=rand.nextInt(35)+1更改为nt lottoTal=rand.nextInt(34)+1

公共类LottoCanvas扩展边框窗格{
私人帆布;
私有图形上下文gc;
私人文本;
私人文本文本额外///
私人彩票;
私家乐透//
随机兰德;
公共LottoCanvas(){//构造函数
lottorad=newhashset();
lottoradExtra=新的HashSet();
rand=新随机数();
画布=新画布(250250);
gc=canvas.getGraphicsContext2D();
按钮按钮=新按钮(“丽塔om”);
setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(事件){
抽签(gc);
}
});//结束事件处理程序
VBox VBox=新的VBox();
vbox.setPadding(新插图(5,5,5,5));
vbox.setAlignment(位置中心);
text=新文本();
textExtra=新文本()//
vbox.getChildren().addAll(文本、文本额外、按钮);
抽签(gc);
设置中心(画布);
setBottom(vbox);
}//端构造函数
私有void createLottoRad(){
lottorad.clear();
lottoradExtra.clear();
while(lottorad.size()
我试图避免在我的彩票行重复,即如果数字35是在第一个彩票行,那么它一定不在第二行我不明白为什么我不断得到重复我添加了一个图像,更好地解释了我的问题?什么是解决这个问题的最佳方法

您当前的方法是这样的:

  • 将随机数添加到
    lottorad
    中,直到其中有7个唯一值
  • 将随机数添加到
    lottoradExtra
    中,直到其中有4个唯一值
这两个集合是独立的,因此没有什么可以阻止在这两个集合中使用相同的数字。您可以在填充
lottoradExtra
时添加一个显式条件,以跳过该数字(如果该数字已在
lottorad
中),例如:

while (lottoradExtra.size() < 4) {
    int lottoTal = rand.nextInt(35) + 1;
    if (lottorad.contains(lottoTal)) {
        continue;
    }
    lottoradExtra.add(lottoTal);
}
List<Integer> numbers = IntStream.rangeClosed(1, 35).boxed().collect(Collectors.toList());
Collections.shuffle(numbers);

lottorad.clear(); 
lottorad.addAll(numbers.subList(0, 7));

lottoradExtra.clear(); 
lottoradExtra.addAll(numbers.subList(7, 11));
while(lottoradExtra.size()<4){
int lottoTal=rand.nextInt(35)+1;
if(lottorad.contains(lottoTal)){
继续;
}
乐透右旋。添加(乐透);
}
然而,目前的方法是有缺陷的,因为当相同的数字不断重复出现时,做额外的循环有点浪费。理论上,你的程序可能不会终止

另一种方法是建立一个数字列表,将其洗牌,然后只取前7个值,然后取前4个值。这样可以保证不会有重复的值。例如:

while (lottoradExtra.size() < 4) {
    int lottoTal = rand.nextInt(35) + 1;
    if (lottorad.contains(lottoTal)) {
        continue;
    }
    lottoradExtra.add(lottoTal);
}
List<Integer> numbers = IntStream.rangeClosed(1, 35).boxed().collect(Collectors.toList());
Collections.shuffle(numbers);

lottorad.clear(); 
lottorad.addAll(numbers.subList(0, 7));

lottoradExtra.clear(); 
lottoradExtra.addAll(numbers.subList(7, 11));
List number=IntStream.rangeClosed(1,35).boxed().collect(Collectors.toList());
收藏。洗牌(数字);
lottorad.clear();
lottorad.addAll(numbers.subList(0,7));
lottoradExtra.clear();
lottoradExtra.addAll(number.subList(7,11));