Java 如何从列表中选择随机字符和双精度字符,并将它们成对输出到字符串中

Java 如何从列表中选择随机字符和双精度字符,并将它们成对输出到字符串中,java,list,random,Java,List,Random,我对Java比较陌生,我的一部分家庭作业要求我生成一个随机字符串,包含16对音符和持续时间 我查阅了一些示例,并尝试在课堂上筛选所提供的材料,但我发现的结果要么是针对不同的编程语言,要么是仅在列表中选择一个随机项 我已将注释和持续时间定义为: static char[]validNotes={'A','B','C','D','E','F','G'}; 静态双[]有效期={0.25,0.5,1,2,4}; 预期的字符串输出是随机的,但示例如下: [A(2)、G(3)、B(0.5)、C(1)、C(

我对Java比较陌生,我的一部分家庭作业要求我生成一个随机字符串,包含16对音符和持续时间

我查阅了一些示例,并尝试在课堂上筛选所提供的材料,但我发现的结果要么是针对不同的编程语言,要么是仅在列表中选择一个随机项

我已将注释和持续时间定义为:

static char[]validNotes={'A','B','C','D','E','F','G'};
静态双[]有效期={0.25,0.5,1,2,4};
预期的字符串输出是随机的,但示例如下:

[A(2)、G(3)、B(0.5)、C(1)、C(1)、D(0.25),…]

像这样的东西应该可以奏效

static char[] validNotes = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
static double[] validDuration = {0.25, 0.5, 1, 2, 4};
static Random random = new Random();

static String getRandomPair() {
    char note = validNotes[random.nextInt(validNotes.length)];
    double duration = validDuration[random.nextInt(validDuration.length)];
    return note+"("+duration+")";
}

像这样的事情应该会奏效

static char[] validNotes = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
static double[] validDuration = {0.25, 0.5, 1, 2, 4};
static Random random = new Random();

static String getRandomPair() {
    char note = validNotes[random.nextInt(validNotes.length)];
    double duration = validDuration[random.nextInt(validDuration.length)];
    return note+"("+duration+")";
}

类似于此的方法也可以使用-只需使用一个随机数作为数组的位置值

Random r = new Random();

        int randomNote = r.nextInt(validNotes.length);
        int randomNumber = r.nextInt(validDuration.length);

        System.out.println(validNotes[randomNote] + "(" + validDuration[randomNumber] + ")");

这将给你一个数字字母对,所以如果你想得到16,你需要循环它

类似于此的方法也可以使用-只需使用一个随机数作为数组的位置值

Random r = new Random();

        int randomNote = r.nextInt(validNotes.length);
        int randomNumber = r.nextInt(validDuration.length);

        System.out.println(validNotes[randomNote] + "(" + validDuration[randomNumber] + ")");

这将给你一个数字字母对,所以如果你想得到16,你需要循环它

Shmosel的评论似乎对我很管用:

List pairs=new ArrayList();
用于(字符注释:validNotes)
用于(双倍持续时间:有效期)
增加(注+“(“+持续时间+”));
收藏。洗牌(对);
System.out.println(pairs.subList(0,16));

Shmosel的评论似乎对我很有用:

List pairs=new ArrayList();
用于(字符注释:validNotes)
用于(双倍持续时间:有效期)
增加(注+“(“+持续时间+”));
收藏。洗牌(对);
System.out.println(pairs.subList(0,16));

列表对=新建ArrayList();for(字符注释:validNotes)for(双持续时间:validDuration)对。添加(note+“(“+duration+”));收藏。洗牌(对);System.out.println(pairs.subList(0,16))你试过什么?您得到了什么结果?
List pairs=new ArrayList();for(字符注释:validNotes)for(双持续时间:validDuration)对。添加(note+“(“+duration+”));收藏。洗牌(对);System.out.println(pairs.subList(0,16))你试过什么?你得到了什么结果?请记住-这不是随机的,每次都会以不同的顺序产生相同的结果。要重新迭代,与
A
B
等相关的持续时间不会改变请记住-这不是随机的,每次都会以不同的顺序产生相同的结果。要重新迭代,与
A
B
等相关的持续时间不会更改