【问题标题】:Java Finding Average with Loop and ArraysJava 用循环和数组求平均值
【发布时间】:2015-08-27 15:56:49
【问题描述】:

这是我遇到的一个 Java 问题,我对 Java 有点陌生。

我必须:

  1. 生成随机分数

  2. 继续生成直到总和大于 1

  3. 那么我必须显示我生成了多少个数字以及哪些数字

这是我目前的功能:

public static double calcAvg(int numOfTimes){
        double sumOfRand = 0 ;
        int numOffractions = 0;
        double avg = 0;

        double numOfAvg[] = new double[numOfTimes]; // number of rows
        double randNums[] = new double[] {.1,.2,.3,.4,.5,.6,.7,.8,.9};
        Random rand = new Random();


        for(int i = 0; sumOfRand <= 1; i++){
            int randNum = rand.nextInt(randNums.length); //gets a number from array randomly
                //System.out.println(randNums[randNum]);


            sumOfRand += randNums[randNum]; //adds it to the sum
              numOffractions++; //counts # of avgnums needed for > 1

              numOfAvg[i] = numOffractions; 

        }

        avg = (numOfAvg[0] + numOfAvg[1] + numOfAvg[2]) /(numOfTimes); 

    return avg;
}

我不断收到错误消息:numOfAvg[i] = numOffractions; 而且我似乎无法将分数添加到总和中,直到它们通过 1。

【问题讨论】:

  • 分配numOfAvg[i] = numOffractions;时得到的错误信息是什么?
  • @SurrealDreams 我确定是IndexOutOfBounds,但问题陈述不清楚,他从不告诉我们numOfTimes 应该是什么。
  • 顺便说一句,您不需要 randNums 数组。只需生成 1 到 9 之间的随机数,而不是 0 到 8 之间的随机数。
  • 错误如下:double[] numOfAvg被初始化为长度numOfTimes,但在for循环内部,i是索引,即处理numOfAvg的值。 i 的范围可能与numOfTimes 的大小有很大不同。当分数的数量 > numOfTimes 时,这会导致 IndexOutOfBoundsException
  • 你的 for 循环正确吗?你的条件部分没有'i'。

标签: java arrays loops random


【解决方案1】:

好吧,您的代码与您的要求无关..

你需要这样的东西:

public static double calcAvg(){//What is the numOfTimes variable?!
    double randNums[] = new double[] {.1,.2,.3,.4,.5,.6,.7,.8,.9}; //These can be define outside
    Random rand = new Random();
    List<Double> numbers = new LinkedList<Double>(); // This will have the list of numbers
    double sum = 0;
    while(sum<1){
       int randNum = rand.nextInt(randNums.length);
       numbers.add(randNums[randNum]);
       sum+=randNums[randNum];
    }
    for(Double d:numbers){//Print the numbers
       System.out.println(d);
    }
    System.out.println("Average: ", sum/numbers.size());
}

【讨论】:

    【解决方案2】:

    希望当您使用 1、2、3 调用函数 calcAvg 时,数组索引越界。 在 calAvg 方法中,您使用 numOfTimes 作为数组长度并访问超出长度范围的 numofAvg 变量。

    需要根据您的要求重新审视逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      相关资源
      最近更新 更多