随机汽车颜色生成器

时间:2019-07-23 02:55:33

标签: java loops netbeans

我想根据用户的输入随机生成汽车的名称

我尝试使用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;

                }
}
}
};

` 预期每次都会随机分配独特的汽车 结果是随机的,但不是根据用户输入的

1 个答案:

答案 0 :(得分:0)

在您的内部循环中,存在一次您检查t.contains(car) == false两次的问题。如果偶然在第一次迭代中获得了一个未使用的新值,则可以成功地将此值添加到t中。但是,如果不这样做会发生什么呢?您将继续获取其他值(else子句),直到获得t中不存在的值。获得此值后,您就立即退出循环,而无需将该值添加到容器中。

解决方案:

do
{
    car = r.nextInt(cars.length) + 1;
}
while(t.contains(car));
t.add(car);

但是,对于您的问题,还有其他更有效的解决方案,我只是向您展示实现过程中的问题。