首页 > 解决方案 > 试图编写一个方法来从数组中找到最大的对象

问题描述

将方法 public static Measurable max(Measurable[] objects) 添加到返回具有最大度量的对象的 Data 类中。

这就是我的代码。

public interface Measurable
{
double getMeasure();
}

public class MeasurableTester {

public static void main(String[] args) {
    Measurable[] accounts = new Measurable[3];
    accounts[0] = new BankAccount(0);
    accounts[1] = new BankAccount(10000);
    accounts[2] = new BankAccount(2000);
    
    double averageBalance = Data.average(accounts);
    System.out.println("Average balance: " + averageBalance);
    System.out.println("Expected: 4000");
    
    Measurable[] countries = new Measurable[3];
    countries[0] = new Country("Uruguay", 176220);
    countries[1] = new Country("Thailand", 513120);
    countries[2] = new Country("Belgium", 30510);
    
    double averageArea = Data.average(countries);
    System.out.println("Average area: " + averageArea);
    System.out.println("Expected: 239950");
}

}`

''' 和我遇到问题的部分 '''

public class Data {
     Object tempObj = new Object();

public static double average(Measurable[] objects){
    double sum = 0;
    for (Measurable obj : objects){
        sum = sum + obj.getMeasure();
    }
    if (objects.length > 0) {
        return sum / objects.length;
    }else{
        return 0;
    }
}

'''

//我在这里尝试想出一个方法

public static Measurable max(Measurable[] objects){
    double max = 0;
    for (Measurable obj : objects){
      if (obj.getMeasure() > max){
          obj =  max;
      }  
    }
   return max;
  }
 }

标签: javaarraysobjectmax

解决方案


max方法应该是这样的:


public static Measurable max(Measurable[] objects) {
   Measurable max = null;
   for (Measurable obj : objects) {
       if (max == null || obj.getMeasure() > max.getMeasure()) {
              max = obj;
       }  
    }
       return max;
}

如果你使用的是 Java 8,你可以这样做:

public static Measurable max(Measurable[] objects) {
  return Arrays.stream(objects).max(Comparator.comparing(Measurable::getMeasure)).get();
}

此外,使用

for (Measurable obj : objects){

没有null检查是一个秘诀NullPointerException

---- 编辑 ------
使用max方法:

Measurable max = Data.max(countries) // gives max measure containing object
System.out.println(max.getMeasure()) // prints the max measure value

推荐阅读