在Java中无法从列表中接收多个不同的随机字符串

在Java中无法从列表中接收多个不同的随机字符串,java,random,while-loop,Java,Random,While Loop,我想对它进行编码,以便我的代码的输出以随机顺序输出列表中的所有字符串,但不重复和重复它们。我希望用三个以上的变量来实现这一点,但为了简短起见,在这个示例中,我只有三个变量 import java.util.ArrayList; import java.util.List; import java.util.Random; public class TestingOutputs { public static void main(String[] args) { bool

我想对它进行编码,以便我的代码的输出以随机顺序输出列表中的所有字符串,但不重复和重复它们。我希望用三个以上的变量来实现这一点,但为了简短起见,在这个示例中,我只有三个变量

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class TestingOutputs {
    public static void main(String[] args) {
        boolean forever = true, one = true, two = true, three = true;
        List<String> outputsList = new ArrayList<String>();
        outputsList.add("One");
        outputsList.add("Two");
        outputsList.add("Three");

        while(forever){
            String outputsRandom = outputsList.get(new Random().nextInt(outputsList.size()));
            while(three) {
                if(outputsRandom.equals("Three")) {
                    System.out.println("This is three");
                    three = false;
                }
            while(two) {
                if(outputsRandom.equals("Two")) {
                    System.out.println("This is two");
                    two = false;
                }
            }
            while(one) {
                if(outputsRandom.equals("One")) {
                    System.out.println("This is one");
                    two = false;
                }
            }
            }
        }
        }

    }
import java.util.ArrayList;
导入java.util.List;
导入java.util.Random;
公共类测试输出{
公共静态void main(字符串[]args){
布尔永远=真,一=真,二=真,三=真;
List outputsList=new ArrayList();
输出列表。添加(“一”);
输出列表。添加(“两”);
输出列表。添加(“三”);
而(永远){
String outputsRandom=outputsList.get(new Random().nextInt(outputsList.size());
而(三){
if(输出随机数等于(“三”)){
System.out.println(“这是三个”);
三=假;
}
而(二){
if(输出随机数等于(“二”)){
System.out.println(“这是两个”);
二=假;
}
}
而(一){
if(输出随机数等于(“一”)){
System.out.println(“这是一个”);
二=假;
}
}
}
}
}
}

首先创建一个从0到字符串数的数字列表

List<Integer> range = IntStream.rangeClosed(0, outputsList.size() - 1)
    .boxed().collect(Collectors.toList());
这些数字是随机的,不会重复。
希望这能解决您的问题。

首先创建一个从0到字符串的数字列表

List<Integer> range = IntStream.rangeClosed(0, outputsList.size() - 1)
    .boxed().collect(Collectors.toList());
这些数字是随机的,不会重复。
希望这能解决您的问题。

一种可能的解决方案是克隆您的ArrayList,然后随机输出所选项目,然后将其删除。
在代码中,它将如下所示:

import java.util.ArrayList;
公开课范例{
公共静态ArrayList createList(){
ArrayList listTemp=新的ArrayList();
列表临时添加(“一”);
列表临时添加(“两个”);
列表临时添加(“三”);
返回listTemp;
}
公共静态void main(字符串[]args){
ArrayList listOutputs=createList();
//克隆以不更改原始列表
ArrayList listTemp=(ArrayList)listOutputs.clone();
而(listTemp.size()!=0){
int index=(int)(Math.random()*listTemp.size());
System.out.println(“所选元素:'”+listTemp.get(索引)+'”;
listTemp.remove(索引);
}
}
}

但是,这是一种更干净、更有效的方法,尤其是对于较大的列表。

一种可能的解决方案是克隆ArrayList,然后随机输出所选项目,然后将其删除。
在代码中,它将如下所示:

import java.util.ArrayList;
公开课范例{
公共静态ArrayList createList(){
ArrayList listTemp=新的ArrayList();
列表临时添加(“一”);
列表临时添加(“两个”);
列表临时添加(“三”);
返回listTemp;
}
公共静态void main(字符串[]args){
ArrayList listOutputs=createList();
//克隆以不更改原始列表
ArrayList listTemp=(ArrayList)listOutputs.clone();
而(listTemp.size()!=0){
int index=(int)(Math.random()*listTemp.size());
System.out.println(“所选元素:'”+listTemp.get(索引)+'”;
listTemp.remove(索引);
}
}
}
然而,这是一种更干净、更有效的方法,尤其是对于较大的列表