【问题标题】:Find largest average set of results in array在数组中查找最大的平均结果集
【发布时间】:2013-11-29 12:17:12
【问题描述】:

我有一个二维数组,我想找到最大的平均结果集,到目前为止,我可以计算每组结果的平均值,但我不确定如何从输出中选择最大的。

我的代码:

static int[][] studentMarksArray = new int[10][3];

for(int i=0;i<10;i++){
  double total = (studentMarksArray[i][0]*studentMarksArray[i][1]*studentMarksArray[i][2])/3;
  System.out.println(total);
 }

尝试的解决方案:

for(int i=0;i<10;i++){
  double total = (studentMarksArray[i][0]*studentMarksArray[i][1]*studentMarksArray[i][2])/3;
  double newTotal = total;
  if(newTotal>total){
    newTotal = total;
    System.out.println(newTotal);
  }
}

【问题讨论】:

  • 你的问题是什么?你有什么错误吗?
  • 要求代码的问题必须表明对所解决问题的最低理解。包括尝试的解决方案、它们为什么不起作用以及预期的结果。另请参阅:堆栈溢出问题清单
  • 我将包含我尝试的内容,请稍等
  • 一直在你的代码中 newTotal == total。
  • 这就是我在如何存储第一个计算值然后将其与下一个计算值进行比较时遇到的问题

标签: java arrays sorting multidimensional-array


【解决方案1】:

像这样:

 double max = 0;
 for(int i = 0; i < 10; i++){
   double total = (studentMarksArray[i][0]*studentMarksArray[i][1]*studentMarksArray[i][2])/3;
   max = Math.max(max, total);
 }

或者如果你想要索引:

 int index = -1;
 double max = 0;

 for(int i = 0; i < 10; i++){
   double total = (studentMarksArray[i][0]*studentMarksArray[i][1]*studentMarksArray[i][2])/3;

   if(Math.max(max, total) == total) {
     index = i;
     max = total;
   }
 }

好的,如果你想在最后得到一个平均值数组,请执行以下操作:

int index = -1;
double max = 0;
double [] averages = new double[10];

 for(int i = 0; i < 10; i++){
   double total = (studentMarksArray[i][0]*studentMarksArray[i][1]*studentMarksArray[i][2])/3;
   averages[i] = total;
   if(Math.max(max, total) == total) {
     index = i;
     max = total;
   }
 }

【讨论】:

  • 当我运行你的代码时,程序会打印出每组标记的所有平均值
  • 我的代码将为您生成集合的最大值和该集合的索引。还是你想要别的?
  • 我想得到每组的平均值,然后输出最高的平均值
  • 这就是它在做什么......在max 中你有最高的平均值,在index 你有相应的索引。
  • 我再次尝试时成功了,我第一次写错了,道歉并感谢您的帮助
【解决方案2】:

在变量初始化后添加

  int largest=0,lp=0;

在 forloop 结束之前但在计算总数之后添加它

  if(largest<total){
    largest=total;lp=i;
  }

在 forloop 结束时,您将在变量 maximum 中获得最大平均值及其在变量 i 中的位置。

【讨论】:

  • 我已尝试实现您的代码,但它打印出所有平均分:for(int i=0;i&lt;10;i++){ double largest=0,lp=0; double total = (studentMarksArray[i][0]*studentMarksArray[i][1]*studentMarksArray[i][2])/3; if(largest&lt;total){ largest=total; lp=i; }System.out.println(largest); }
  • sopln(最大);将在 for 循环之外
【解决方案3】:

您可以将每一步的 outPut 保存到优先级队列中(以自然顺序保存元素),并在最后一步中 pull() 该优先级队列中的最高值。

import java.util.PriorityQueue;

public class Test1 {

public static void main(String[] arg){

    int[][] studentMarksArray = new int[10][3];

    PriorityQueue<Double> pq = new PriorityQueue<Double>();

    for(int i=0;i<10;i++){
      double total = (studentMarksArray[i][0]*studentMarksArray[i][1]*studentMarksArray[i][2])/3;
      System.out.println(total);
      pq.add(total);
     }
    System.out.println(pq.poll());;
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2014-06-11
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    相关资源
    最近更新 更多