java - 随机汽车颜色生成器
问题描述
我想根据用户的输入随机生成汽车的名称
我尝试使用 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;
}
}
}
};
` 每次结果随机化但不根据用户输入随机化的预期独特汽车
解决方案
在您的内部循环中,存在您检查t.contains(car) == false
两次的问题。如果您在第一次迭代时意外获得了一个新的未使用值,则您成功将此值添加到t
. 但如果你不这样做会发生什么?您将继续获得其他值(else 子句),直到获得不存在于t
. 在得到这个值之后,你退出循环而不将值添加到容器中。
解决方案:
do
{
car = r.nextInt(cars.length) + 1;
}
while(t.contains(car));
t.add(car);
但是,您的问题还有其他更有效的解决方案,我只是向您展示您的实施中的问题。
推荐阅读
- ngx-mydatepicker - 如何将周末从周六/周日更改为其他日子
- vba - 如何将触发文件夹创建的邮件插入该文件夹?
- go - 无法获取当前窗口标题
- fortran - 尝试打开文本文件时,Fortran 代码产生运行时错误“不支持操作”
- c# - 应用 TreeView 过滤器后 DataGridView 中出现多余的行
- php - 使用不同的变量加载相同的视图两次
- pyspark - 如何读取 pyspark 提取的一个文件中的多个嵌套 json 对象到 Azure databricks 中的数据框?
- c++ - 声明一个全局变量而不在 C++ 中初始化
- c# - HttpPostAttribute 中 Name 参数的作用是什么
- c# - .NET Core - 库中未包含/编译的图像资源