【问题标题】:Sending variables from one method to another将变量从一种方法发送到另一种方法
【发布时间】:2016-10-09 00:09:33
【问题描述】:

所以我有一个程序可以计算平均成绩、最高成绩、最低成绩和没有最低成绩的平均成绩。因此,对于确定没有最低成绩的新平均值的方法,我想使用我在该方法中找到的最低成绩。

/**
 * lowestGrade() - method will return lowest grade
 * @return lowGrade
 */
public static double lowestGrade(double[] grades) {

    double lowGrade = 100.0;

    // for loop that goes through grades array and stores
    // first grade found as highest grade
    for (int i = 0; i < grades.length; i++) {

        // if statement will determine true lowest grade
        if ( grades[i] < lowGrade ) {
            lowGrade = grades[i];
        }
    }

    // Output
    return lowGrade;
}

/**
 * averageWOLowGrade() - method will calculate average without lowest grade
 * @return newAverage
 */
public static void averageWOLowGrade(double[] grades) {
    double newAverage = 0;  
}

【问题讨论】:

  • 在字段中存储最低成绩?
  • 如果数组中有两个(或更多)值等于最小值怎么办。你只是排除其中一个,还是全部排除?例如。输入为2, 5, 2, 8, 2,真实平均值为3.8。您是否排除了 2 之一,例如average = (5+2+8+2)/4 = 4.25,或者您是否排除了所有 2,例如average = (5+8)/2 = 6.5?
  • 如果您的问题已经解决,请接受最佳答案。如果没有,请尝试编辑问题以尽可能改进它。

标签: java arrays joptionpane


【解决方案1】:

before 所述,您可以在字段中存储最低成绩:

private static double min = 0.0;

public static double lowestGrade(double[] grades) {
    // Set min and return its value.
    return min = DoubleStream.of(grades).min().getAsDouble();
}

public static double averageWOLowGrade(double[] grades) {
    return DoubleStream.of(grades).filter(x -> x != min)
                                  .average()
                                  .getAsDouble();
}

请记住,执行顺序在这里很重要。我宁愿计算两次值,而不是在静态变量中管理状态。甚至更好:一次计算所有结果:

public static Stats computeStats(double[] grades) {
    double min, max;
    min = max = grades[0];
    double sum = 0.0;

    for (double grade : grades) {
        if (grade < min) {
            min = grade;
        } else if (grade > max) {
            max = grade;
        }
        sum += grade;
    }

    double avg = sum / grades.length;
    int len = 0;
    sum = 0.0;

    for (double grade : grades) {
        if (grade != min) {
            sum += grade;
            len++;
        }
    }

    return new Stats(min, max, avg, sum / len);
}

static class Stats {
    public final double min;
    public final double max;
    public final double avg;
    public final double avgWithoutMin;

    Stats(double min, double max, double avg, double avgWithoutMin) {
        this.min = min;
        this.max = max;
        this.avg = avg;
        this.avgWithoutMin = avgWithoutMin;
    }
}

【讨论】:

  • 没有解释的代码没有那么有用。
  • @Andreas 确实,修复了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 2017-07-29
  • 2020-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多