【问题标题】:How to pick a random char and double from list and output them in a string paired together如何从列表中选择一个随机字符和双精度并将它们输出成一个配对的字符串
【发布时间】:2019-09-13 00:19:41
【问题描述】:

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

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

我将音符和持续时间定义为:

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

预期的字符串输出将是随机的,但示例如下:

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

【问题讨论】:

  • List<String> pairs = new ArrayList<>(); for (char note : validNotes) for (double duration : validDuration) pairs.add(note + "(" + duration + ")"); Collections.shuffle(pairs); System.out.println(pairs.subList(0, 16));
  • 你试过什么?你得到了什么结果?

标签: java list random


【解决方案1】:

这样的事情应该可以解决问题;

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+")";
}

【讨论】:

    【解决方案2】:

    类似的东西会起作用——只是使用一个随机数作为数组的位置值。

    Random r = new Random();
    
            int randomNote = r.nextInt(validNotes.length);
            int randomNumber = r.nextInt(validDuration.length);
    
            System.out.println(validNotes[randomNote] + "(" + validDuration[randomNumber] + ")");
    

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

    【讨论】:

      【解决方案3】:

      Shmosel 的评论对我来说似乎效果很好:

          List<String> pairs = new ArrayList<>();
          for (char note : validNotes)
          for (double duration : validDuration)
          pairs.add(note + "(" + duration + ")");
          Collections.shuffle(pairs);
          System.out.println(pairs.subList(0, 16));
      

      【讨论】:

      • 请记住 - 这不是随机的,每次都会以不同的顺序产生相同的结果。
      • 重新迭代,与AB等关联的持续时间不会改变
      猜你喜欢
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 2023-01-04
      • 2012-02-03
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      相关资源
      最近更新 更多