我正在为今晚到期的编程项目使用数组。我能够将所有数组的数字相加,但从那里我无法从中删除最大值和最小值。我的尝试和实际的项目描述如下......
在潜水运动中,七位评委会将得分在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;
代码运行并生成正确的输出,但它似乎没有减去最大值和最小值以及问题请求...感谢您的帮助!
答案 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();
}
});
});