Java 陷入离散分布,无法完成问题

Java 陷入离散分布,无法完成问题,java,arrays,Java,Arrays,编写一个程序DiscreteDistribution.java,该程序接受一个整数命令行参数m,后跟一系列正整数命令行参数a1、a2、…、an,并打印m个由空格分隔的随机索引,以与ai成比例的概率选择每个索引i 到目前为止我有 public static void main(String[] args) { // number of random indices int m = Integer.parseInt(args[0]); // read in frequenc

编写一个程序DiscreteDistribution.java,该程序接受一个整数命令行参数m,后跟一系列正整数命令行参数a1、a2、…、an,并打印m个由空格分隔的随机索引,以与ai成比例的概率选择每个索引i

到目前为止我有

public static void main(String[] args) {
    // number of random indices
    int m = Integer.parseInt(args[0]);

    // read in frequency of occurrence of n values
    int n = args.length;
    int[] freq = new int[n];
    for (int i = 0; i < n; i++) {
        freq[i] = Integer.parseInt(args[i]);
    }

    // compute total count of all frequencies
    int total = 0;
    for (int i = 0; i < n; i++) {
        total += freq[i];
    }
    for (int j = 0; j < m; j++) {
        // generate random integer with probability proportional to frequency
        int r = (int) ((total) * Math.random() - 1);   // integer in [0, total)
        int sum = 0;
        int event = -1;
        for (int i = 0; i < n && sum <= r; i++) {
            sum += freq[i];
            event = i;
            System.out.println(freq[i]);
        }
    }

}

假设我正确理解了您的问题,那么您可以使用以下算法根据给定频率生成1到n范围内的m个随机数:

 public static void main(String[] args) {

    // number of random indices
    int m = Integer.parseInt(args[0]);

    // read in frequency of occurrence of n values
    int n = args.length;
    int[] freq = new int[n];
    for (int i = 1; i < n; i++) {
      freq[i] = Integer.parseInt(args[i]);
    }

    // compute total count of all frequencies
    int total = 0;
    for (int i = 1; i < n; i++) {
      total += freq[i];
    }
    double[] summedProbabilities = new double[n];
    for (int i = 1; i < summedProbabilities.length; i++) {
      final double probability = freq[i] / (double) total;
      summedProbabilities[i] = summedProbabilities[i -1] + probability;

    }
    for (int j = 0; j < m; j++) {
      // generate random integer with probability proportional to frequency
      double randomProbability = Math.random();
      int i = 1;
      while (randomProbability > summedProbabilities[i]) {
        i++;
      }
      System.out.print(i + " ");
      if (j % 10 == 0) {
        System.out.println();
      }
    }
  }

我强烈建议您重构代码,使用方法来计算小片段,然后编写代码。

Java对于Javascript就像痛苦对于绘画,火腿对于仓鼠一样。他们完全不同。强烈建议有抱负的程序员尝试学习他们试图编写代码的语言的名称。当你发布一个问题时,请给它贴上适当的标签——这可以让那些了解你需要帮助的语言的人看到你的问题。我理解。我对这是相当陌生的,我不知道这一点。谢谢你帮我澄清。你能分享一个输入字符串数组args的例子吗?你说你在完成这个问题时遇到了问题,但你没有说问题是什么。我添加了一些图片来帮助你。