2016-11-06 168 views
0

我今晚在编程项目中使用数组。我可以将数组的所有数字相加,但是从那里我无法从中删除最大值和最小值。我的尝试和实际项目描述如下...如何从数组中提取最大值和最小值?

在潜水运动中,七名评委评分介于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; 

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

+2

看起来对我来说就像你将最大值和最小值初始化为0一样(divingScores起初是一个空数组)。您应该尝试将它们分别设置为一些较小的值和一些较大的值。 – Xyene

回答

0

您已经忘记将每位评委的分数添加到数组divingicores。

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 = 0 

如果你不这样做,每一个上面0的比分将不会被认为是可以通过改变第一个for循环以下解决这个问题最小。

0

你从来没有设置您for环内的else分支数组值,它应该是这样的:

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(); 

或者,你应该初始化的最小值和最大值正确,单程至少做到这一点一般Ø数组中的NE元素是:

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

你可以对数组进行排序,然后添加不同的排序数组的第一个和最后一个元素的数组元素,它会自动删除最小和最大

Arrays.sort(divingScores); 
double ans=0; 
for(int i=1;i<divingScores.length-1;i++){ 
    System.out.println(divingScores[i]); 
    ans+=divingScores[i]; 
} 
相关问题