Java 拒绝某些数字的程序

Java 拒绝某些数字的程序,java,Java,我需要创建一个程序,随机打印1到42之间的6个数字,其中没有两个数字是相同的。用户还必须插入6个数字。如果任何数字与计算机随机选择的数字相同,则计算机必须打印该数字。如果不是,电脑会打印出你是个失败者。现在,问题是我不确定如何确保随机选择的两个数字是相同的。如果一个数字小于1、大于42或等于先前插入的数字,程序也应该要求另一个数字,并扫描它,我也不能这样做。(用户不能输入2个相同的数字) import java.util.Scanner; 导入java.util.Random; 公营洗衣机{ 公

我需要创建一个程序,随机打印1到42之间的6个数字,其中没有两个数字是相同的。用户还必须插入6个数字。如果任何数字与计算机随机选择的数字相同,则计算机必须打印该数字。如果不是,电脑会打印出你是个失败者。现在,问题是我不确定如何确保随机选择的两个数字是相同的。如果一个数字小于1、大于42或等于先前插入的数字,程序也应该要求另一个数字,并扫描它,我也不能这样做。(用户不能输入2个相同的数字)

import java.util.Scanner;
导入java.util.Random;
公营洗衣机{
公共静态void main(字符串[]args){
System.out.println(“请输入1到42之间的6个数字”);
扫描仪扫描=新扫描仪(System.in);
int[]标记=新的int[6];
Random ran=新的Random();
int[]x=新的int[6];
布尔赢家=假;
对于(int i=0;i<6;i++){
marks[i]=scan.nextInt();
while(标记[i]>42){
System.out.println(标记[i]+“超出范围。请选择一个小于43.”的数字);
marks[i]=scan.nextInt();
i=0;
}
while(标记[i]<1){
System.out.println(标记[i]+“超出范围。请选择大于0的数字);
marks[i]=scan.nextInt();
i=0;
}
while(marks[i]==marks[i]-1){
System.out.println(“您已经选择了”+标记[i]+“请选择一个不同的数字”);
marks[i]=scan.nextInt();
i=0;
}
}
对于(int j=0;j<6;j++){
x[j]=ran.nextInt(42)+1;
对于(int y=0;y

}

您可以使用集合存储值,并在添加后询问大小。每当您想要处理不应该重复的对象集合时,集合是一种很好的方式,因为它不允许重复。 大概是这样的:

Set<Integer> numbers = new HashSet<Integer>();

random code goes here...

int size = numbers.size();
numbers.add(newValue);
if(numbers.size() == size){
    number needs to be created again...
}
Set number=new HashSet();
这里有随机码。。。
int size=numbers.size();
数字。添加(新值);
if(number.size()==大小){
需要再次创建编号。。。
}

您可以使用集合来存储值,并在添加后询问大小。每当您想要处理不应该重复的对象集合时,集合是一种很好的方式,因为它不允许重复。 大概是这样的:

Set<Integer> numbers = new HashSet<Integer>();

random code goes here...

int size = numbers.size();
numbers.add(newValue);
if(numbers.size() == size){
    number needs to be created again...
}
Set number=new HashSet();
这里有随机码。。。
int size=numbers.size();
数字。添加(新值);
if(number.size()==大小){
需要再次创建编号。。。
}

基本上,从42中提取6有两种方法

第一种方法是连续绘制,直到有6个唯一的数字。每次抽签都有相同的概率(1/42)来抽签特定的号码。虽然你总是画同一个数字的可能性很低,但它不是0。因此,从统计角度来看,这是不正确的。在Java中,您可以这样做

Random rand = new Random();
List<Integer> randomNumbers = Stream.generate(() -> rand.nextInt(42))
                                    .distinct()
                                    .limit(6)
                                    .collect(toList());
Random rand=new Random();
List randomNumbers=Stream.generate(()->rand.nextInt(42))
.distinct()
.限额(6)
.collect(toList());
你真正想要的是画42的1,41的1,40的1。。。一种方法是生成一个包含所有可能的数字(1..42)的列表,画一个,从列表中删除,画另一个,等等

final List<Integer> numbers = IntStream.rangeClosed(1, 42)
                                       .boxed()
                                       .collect(toList());
final List<Integer> randomNumbers2 = Stream.generate(() -> rand.nextInt(numbers.size()))
                                           .limit(6)
                                           .map(i -> numbers.remove((int)i))
                                           .collect(toList());
final List number=IntStream.rangeClosed(1,42)
.boxed()
.collect(toList());
最终列表randomNumbers2=Stream.generate(()->rand.nextInt(numbers.size()))
.限额(6)
.map(i->number.remove((int)i))
.collect(toList());
最后,通过do-while循环可以轻松地读取输入,直到得到一个有效的数字

Scanner scanner = new Scanner(System.in);
int number;
do{
  number = scanner.nextInt();
} while(number < 0 && number > 42);

if(randomNumbers2.contains(number)){
  System.out.println("Winner");
} else {
  System.out.println("Looser");
}
Scanner Scanner=新的扫描仪(System.in);
整数;
做{
编号=scanner.nextInt();
}而(数量<0&&number>42);
if(randomNumbers2.contains(number)){
System.out.println(“获胜者”);
}否则{
System.out.println(“宽松者”);
}

基本上,从42中提取6有两种方法

第一种方法是连续绘制,直到有6个唯一的数字。每次抽签都有相同的概率(1/42)来抽签特定的号码。虽然你总是画同一个数字的可能性很低,但它不是0。因此,从统计角度来看,这是不正确的。在Java中,您可以这样做

Random rand = new Random();
List<Integer> randomNumbers = Stream.generate(() -> rand.nextInt(42))
                                    .distinct()
                                    .limit(6)
                                    .collect(toList());
Random rand=new Random();
List randomNumbers=Stream.generate(()->rand.nextInt(42))
.distinct()
.限额(6)
.collect(toList());
你真正想要的是画42的1,41的1,40的1。。。一种方法是生成一个包含所有可能数字(1..42)的列表,画一个,从列表中删除,再画另一个et