我正在尝试从我创建的 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 回答
慕仙森
TA贡献1827条经验 获得超7个赞
您有一个问题,您的算法可能会多次返回相同的颜色(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 个随机整数的流,并通过访问数组来打印元素。
添加回答
举报
0/150
提交
取消