如何从数组中提取最大值和最小值?

时间:2016-11-06 02:40:21

标签: java arrays

我正在为今晚到期的编程项目使用数组。我能够将所有数组的数字相加,但从那里我无法从中删除最大值和最小值。我的尝试和实际的项目描述如下......

在潜水运动中,七位评委会将得分在0到10之间,其中每个得分可能是一个浮点值。抛出最高和最低分数,并将剩余分数加在一起。然后将总和乘以该潜水的难度。难度范围从1.2到3.8。然后将总数乘以0.6以确定潜水员的得分。

编写一个计算机程序,输入一定程度的难度和七个评委的分数,并输出该潜水的总分。该程序应确保所有输入都在允许的数据范围内。

package baker;

import java.util.Scanner;

public class DiveScoreDriver {
    public static void main(String[] args) {

        Scanner keyboard = new Scanner(System.in);

        double total = 0;
        double totalFinal = 0;
        double divingScores[] = new double[7];
        double input;
        double difficultyInput = 0;
        double minimum = divingScores[0];
        double maximum = divingScores[0];

        for (int i = 1; i < divingScores.length + 1; i++) 
        {
            System.out.println("Judge " + i + " please enter your score.");
            input = keyboard.nextDouble();
            System.out.println();

            if(input < 0 || input > 10) 
            {
                System.out.println("Invalid Score");
                    return;
            }
            else 
            {
                total += input; 
            } 
        }

        while (difficultyInput < 1.2 || difficultyInput > 3.8) 
        {
            System.out.println("Difficulty Rating: ");
            difficultyInput = keyboard.nextDouble();
        }


        for(int i = 0; i < divingScores.length; i++)
    {
            if(divingScores[i] < minimum)
        minimum = divingScores[i];
            if(divingScores[i] > maximum)
        maximum = divingScores[i];
        }

        total = total - maximum - minimum;
        total = total * difficultyInput;
    total = total * 0.6;

        System.out.printf("\nThe overall score for the dive: %.1f\n", total);

    }
}

我正在努力解决的部分就在这里:

  for(int i = 0; i < divingScores.length; i++)
    {
            if(divingScores[i] < minimum)
        minimum = divingScores[i];
            if(divingScores[i] > maximum)
        maximum = divingScores[i];
        }

        total = total - maximum - minimum;
        total = total * difficultyInput;
        total = total * 0.6;

代码运行并生成正确的输出,但它似乎没有减去最大值和最小值以及问题请求...感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您忘记将每个评委的分数添加到数组divingScores。您可以通过将第一个for循环更改为以下内容来解决此问题:

for (int i = 0; i < divingScores.length; i++) 
    {
        System.out.println("Judge " + (i + 1) + " please enter your score.");
        input = keyboard.nextDouble();
        System.out.println();

        if(input < 0 || input > 10) 
        {
            System.out.println("Invalid Score");
                return;
        }
        else 
        {
            total += input;
            divingScores[i] = input;
        } 
    }

您还应该将minimum初始化为:

minimum = 0

如果不这样做,则每个0以上的分数都不会被视为最低分数。

答案 1 :(得分:0)

您永远不会在else循环中的for分支中设置数组值,它应如下所示:

if(input < 0 || input > 10) {
    System.out.println("Invalid Score");
    return;
} else {
    divingScores[i] = input;
    total += input; 
} 

在第二个循环之前,您可以使用Java 8函数式编程来获得这样的最小值和最大值,这更短:

double minimum = Arrays.stream(divingScores).min().getAsDouble();
double maximum = Arrays.stream(divingScores).max().getAsDouble();

或者,你应该正确地初始化最小值和最大值,一般来说,一种方法是对数组中的至少一个元素执行此操作:

double minimum = Double.MAX_VALUE; // Use your maximum in your case
double maximum = Double.MIN_VALUE; // Use your minimum in your case

答案 2 :(得分:0)

您可以对数组进行排序,然后添加除排序数组的第一个和最后一个元素之外的数组元素,这将自动删除最小值和最大值

$(".glyphicon-minus-sign, .glyphicon-plus-sign").click(function(){
    $(this).toggleClass("glyphicon-minus-sign glyphicon-plus-sign");
});

//NVV
jQuery(function($){
    //open the lateral panel
    $('.cd-btn').on('click', function(event){
        event.preventDefault();
        $('.cd-panel').toggleClass('is-visible');
    });
    //close the lateral panel
    $('.cd-panel').on('click', function(event){
        if( $(event.target).is('.cd-panel') || $(event.target).is('.cd-panel-close') ) { 
            $('.cd-panel').removeClass('is-visible');
            $('.cd-btn').toggleClass("glyphicon-minus-sign glyphicon-plus-sign");
            event.preventDefault();
        }
    });
});