如何从颜色数组中打印5种随机颜色

时间:2018-11-11 20:07:32

标签: java

我正在尝试从我创建的10种颜色的阵列中打印5种随机颜色(颜色可以重复,只要它们是随机的)。我知道我很亲密,但是我不确定我要去哪里错了。

import java.util.Random;

public class RandomColors
{
   public static void main (String[] args)
   {
    Random r = new Random();

    String[] colors = {"red","green","blue","yellow","brown","black","white","indigo","orange","purple"};
    String[] solution = new String[5];

    for(int i = 0; i < solution.length; i++)
    {
     solution[i] = colors[r.nextInt(10)];
     System.out.println(i);
    }

   }
}

我知道我的问题是我正在尝试打印“ i”,但是我不确定应该合并什么来进行打印。

3 个答案:

答案 0 :(得分:5)

您有一个问题,就是算法可能多次返回相同的颜色(r.nextInt(10)可能多次返回相同的值)。

一种更直接的解决方案是将数组转换为列表,将其随机播放(这是“随机”部分),然后打印前5个元素:

List<String> colorsList = Arrays.asList(colors);
Collections.shuffle(colorsList);
colorsList.stream().limit(5).forEach(System.out::println);

由于对问题进行了编辑以说允许使用非唯一的颜色,因此可以这样打印:

IntStream.generate(() -> r.nextInt(colors.length))
    .limit(5)
    .mapToObj(i -> colors[i])
    .forEach(System.out::println);

这将生成5个随机整数的流,并通过访问数组来打印元素。

答案 1 :(得分:2)

仅打印// // dummyControl1 // ... this.dummyControl1.MyCollection.Add(collectionItem1); this.dummyControl1.MyCollection.Add(collectionItem2); this.dummyControl1.MyCollection.Add(collectionItem3); this.dummyControl1.MyCollection.MyString = "Hello"; ... 而不是solution[i]

i

答案 2 :(得分:1)

只需替换

  

System.out.println(i);

  

System.out.println(solution [i]);