我想根据用户的输入随机生成汽车的名称
我尝试使用while循环并执行while循环来生成随机汽车,但是我无法根据用户提供的数量来迭代循环。当用户输入4时,有时会生成2或3次,但不会生成4次
`
public static void main(String[] args) {
// TODO code application logic here
Scanner in = new Scanner(System.in);
String[] colors ={"Blue", "Red","Green", "Purple"};
Random r = new Random();
int length;
System.out.println("How many cars would you like to paint?");
length = in.nextInt();
String[] cars = new String[length];
for(int k = 0 ; k < length; k++)
{
System.out.println ("Enter the name of cars" + (k+1));
cars[k] = in.next();
}
in.close();
System.out.println("--------------------------------------------------------");
final Set<Integer> s = new HashSet<>();
final Set<Integer> t = new HashSet<>();
for(int i = 0; i < cars.length; i++){
while(true){
int car = r.nextInt(cars.length) + 1;
do{
if (t.contains(car) == false){
t.add(car);
System.out.println(cars[car - 1]);
}
else{
car = r.nextInt(cars.length) + 1;
}
}while(t.contains(car) == false);
int pick = r.nextInt(cars.length) + 1;
break;
}
}
}
};
` 预期每次都会随机分配独特的汽车 结果是随机的,但不是根据用户输入的
答案 0 :(得分:0)
在您的内部循环中,存在一次您检查t.contains(car) == false
两次的问题。如果偶然在第一次迭代中获得了一个未使用的新值,则可以成功地将此值添加到t
中。但是,如果不这样做会发生什么呢?您将继续获取其他值(else子句),直到获得t
中不存在的值。获得此值后,您就立即退出循环,而无需将该值添加到容器中。
解决方案:
do
{
car = r.nextInt(cars.length) + 1;
}
while(t.contains(car));
t.add(car);
但是,对于您的问题,还有其他更有效的解决方案,我只是向您展示实现过程中的问题。