繁体   English   中英

如何使用math.max和math.min忽略高低分数

[英]How to us math.max and math.min to omit high and low scores

(这是Java)在我的方法中,我正在计算文件中给我的7分。 我必须设置一个最大值和最小值,将它们初始化,也就是我遇到问题的地方。 另外,我必须将math.max和math.min与我的总和一起使用。 如果需要更多我的程序,请询问。 示例文件输入为:

public static double calculateDiveScore(String diveLine) {
    Scanner diveLineSc = new Scanner(diveLine);

    int dive = diveLineSc.nextInt();
    double difficulty = diveLineSc.nextDouble();
    double sum = 0.0;
    double max = ;
    double min = ;


    for( int i = 1; i < 7; i++){
        double score = diveLineSc.nextDouble();
        max = Math.max(max,score);
        min = Math.min(min,score);
        sum +=score;

    }

    double totalScore = (sum - max - min )* difficulty * 0.6;

    return totalScore;
}

您需要按如下所示初始化变量。

double max = Double.NEGATIVE_INFINITY;
double min = Double.POSITIVE_INFINITY;

可能是因为您只检查6个数字,但我不知道您的程序在做什么。 从0开始。

初始化Max和Min如下

public static double calculateDiveScore(String diveLine) {
Scanner diveLineSc = new Scanner(diveLine);

int dive = diveLineSc.nextInt();
double difficulty = diveLineSc.nextDouble();
double max = diveLineSc.nextDouble();
double min = max;
double sum = max;


for( int i = 1; i < 7; i++){
    double score = diveLineSc.nextDouble();
    max = Math.max(max,score);
    min = Math.min(min,score);
    sum +=score;

}

double totalScore = (sum - max - min )* difficulty * 0.6;

return totalScore;

}

从第一个值开始最大值和最小值,然后减少一次循环。

double first = diveLineSc.nextDouble();
double max = first;
double min = first;
double sum = first;


for (int i = 0; i < 5; i++) {...}

或者,将您的值收集到数组中并使用库方法。

double sum = 0;
ArrayList<Double> scores = new ArrayList<Double>();
for (int i = 0; i < 6; i++) {
    double score = diveLineSc.nextDouble();
    scores.add(score);
    sum += score;
}

double min = Collections.min(scores);
double max = Collections.max(scores);

请注意,在内部,Java可能会在调用minmax的列表中执行另一个循环。 如果您的代码速度太慢(除非您要处理数百万个分数,否则我真的怀疑这会很慢),第一个算法可能会更优化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM