2017-04-06 79 views
0

返回类型为“ProvinceTerritory”。 这是类名 getPopulation()和getName()是省级领土内部的访问者。 另外省份是ArrayList的名称,其中包含所有城市和他们的人口。我试图找到最大人口使用forech循环,然后让程序返回该单元格的名称。返回人口最多的城市名称

public ProvinceTerritory getHighestPopulation(){ 
int max = provinces.get(0).getPopulation(); 
for(ProvinceTerritory pt3 : provinces){ 
    if(pt3.getPopulation() > max){ 
     max = pt3.getPopulation(); 
    } 

} 
return ??; 
} 
+0

做你的'ProvinceTerritory'类有一个'name'属性或类似的东西? –

+0

你的问题有点令人困惑。你想返回这个名字,但是你的返回类型是'ProvinceTerritory'。无论哪种方式,只需在foreach循环之前声明一个变量,并将其设置在if语句内,就像现在使用'max'一样,然后返回该值。 –

+0

创建ProvinceTerritory的实例,并在条件匹配并更新时返回。 –

回答

0

不记得最多的人口,有最大的人口记住ProvinceTerritory

public ProvinceTerritory getHighestPopulation() { 
    ProvinceTerritory max = null; 
    for (ProvinceTerritory pt3 : provinces) 
     if (max == null || pt3.getPopulation() > max.getPopulation()) 
      max = pt3; 
    return max; 
} 

或Java 8个流版本:

public ProvinceTerritory getHighestPopulation() { 
    return provinces.stream() 
        .max(Comparator.comparingInt(ProvinceTerritory::getPopulation)) 
        .orElse(null); 
} 
+0

假设该方法应该返回一个字符串作为问题关于该单元的名称的问题 –

+0

考虑到OP正在调用'provinces.get(0)',您可以调用'Optional.get()'。 – shmosel

+0

@shmosel真的,但我想在这里的两个版本行为*相同*,所以我做了第二个行为像第一个。问题代码在空列表上抛出“IndexOutOfBoundsException”这一事实很可能是无意的,即OP没有考虑这种情况。缺少* defined *行为可以让我的行为有所不同。 ;-) – Andreas

0

您需要跟踪人口最多的省份区域,以便您可以将其退回。

public ProvinceTerritory getHighestPopulation(){ 
    int max = provinces.get(0).getPopulation(); 
    ProvinceTerritory result = provinces.get(0); 
    for(ProvinceTerritory pt3 : provinces){ 
     if(pt3.getPopulation() > max){ 
      max = pt3.getPopulation(); 
      result = pt3; 
     } 
    } 
    return result; 
} 
+0

你将需要初始化'result'。 – shmosel

+0

编译错误:*本地变量结果可能未初始化* – Andreas

+0

谢谢,我更正了它 –

相关问题