首页 > 解决方案 > 随机汽车颜色生成器

问题描述

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

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

                }
}
}
};

` 每次结果随机化但不根据用户输入随机化的预期独特汽车

标签: javaloopsnetbeans

解决方案


在您的内部循环中,存在您检查t.contains(car) == false两次的问题。如果您在第一次迭代时意外获得了一个新的未使用值,则您成功将此值添加到t. 但如果你不这样做会发生什么?您将继续获得其他值(else 子句),直到获得不存在于t. 在得到这个值之后,你退出循环而不将值添加到容器中。

解决方案:

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

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


推荐阅读