有没有一个函数可以让Java从列表中选择一个项目并将其删除?

Jac*_*sen 0 java arrays string random

我创建了一个包含 8 个项目的列表,我希望 Java (伪)随机选择一个项目,然后将其从列表中删除。之后,我希望它重复这个过程,直到只剩下一项。

这是代码

package randomlist;
import java.util.Random;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

import java.util.concurrent.ThreadLocalRandom;
    
public class output {

    public static void main(String[] args) throws InterruptedException, AWTException {
        // TODO Auto-generated method stub
        for (int i = 0; i <1 ; i++) {
        Random generate = ThreadLocalRandom.current();
        String[] color = {"Black", "White", "Red", "Blue", "Green", "Mint", "Rose", "Purple" };
        String colorsprint = colors[generate.nextInt(colors.length)];
        
        System.out.println(colorsprint);}}}
        
Run Code Online (Sandbox Code Playgroud)

目前,它按预期输出其选择。我想要它做的是输出它的选择,然后转到另一个包含 7 个剩余项目的列表,但我不想手动编写 256 个不同的列表来嵌套它“if a then pick from b, ETC。

到目前为止,我尝试过的所有代码都导致编译器错误或程序根本无法运行。我什至让它作为嵌套列表工作,根据其第一选择从另一个列表输出,但这在这里不起作用。

我确信这是我已经尝试过但只是搞砸的事情,但我已经用完了我自己的知识。

编辑:我想我应该澄清一下;我知道如何解决这个问题,我只是希望有一种比使用 CTRL-C/CTRL-V 手动完成所有操作更有效的方法;如果我必须为 8 的排列创建 256 个列表,这将导致代码极其笨重。

hev*_*ev1 5

与实现问题中描述的拾取不同,洗牌数组然后打印元素会更有效。

String[] colors = {"Black", "White", "Red", "Blue", "Green", "Mint", "Rose", "Purple" };
Collections.shuffle(Arrays.asList(colors));
for (var color : colors) {
    System.out.println(color);
}
Run Code Online (Sandbox Code Playgroud)

不过,所描述的算法可以用 来实现List

List<String> colors = new ArrayList<>(List.of("Black", "White", "Red", "Blue", "Green", "Mint", "Rose", "Purple"));
while (!colors.isEmpty()) {
    System.out.println(colors.remove(
        ThreadLocalRandom.current().nextInt(colors.size())));
}
Run Code Online (Sandbox Code Playgroud)

要打印删除后剩余的元素:

List<String> colors = new ArrayList<>(List.of("Black", "White", "Red", "Blue", "Green", "Mint", "Rose", "Purple"));
while (colors.size() > 1) {
    colors.remove(ThreadLocalRandom.current().nextInt(colors.size()));
    System.out.println(colors);
}
Run Code Online (Sandbox Code Playgroud)