我在编写for-each循环时遇到问题,搜索arraylist并返回具有最高gdp的大陆的县名。这是我现在的代码。 (ElementsList是原始的ArrayList)
public Country highestGdp(String continent) {
boolean flag;
for (Country cont : ElementsList) {
if (cont.getContinent().equals(continent)) {
ArrayList<Country> TMP1 = new ArrayList<Country>();
TMP1.add(cont);
for (Country gdp : TMP1) {
double max = 0;
if (max < gdp.getGDP()) {
max = gdp.getGDP();
}
if (gdp.getGDP() == max) {
ArrayList<Country> TMP2 = new ArrayList<Country>();
TMP2.add(gdp);
}
return gdp;
}
}
}
return null;
}
答案 0 :(得分:1)
每当您在右大陆找到一个国家/地区时,您可以检查它是否大于目前为止的最大值。不要每次都要遍历所有这些。
public Country highestGdp(String continent) {
boolean flag;
Country maxCountry = null;
for (Country cont : ElementsList) {
if (cont.getContinent().equals(continent)) {
if (maxCountry == null) maxCountry = cont;
if (maxCountry.getGDP() < gdp.getGDP()) {
maxCountry = cont;
}
}
}
return maxCountry;
}
答案 1 :(得分:1)
很抱歉,但是你的代码有点乱;)
要快速解决您的问题,请尝试在循环之前移动max声明,如下所示:
[...]
double max = 0;
for(Country gdp : TMP1){
[...]
我们可以看到TMP2完全没用,删除它:
// ArrayList<Country> TMP2 = new ArrayList<Country>();
// TMP2.add(gdp);
您始终只使用1个元素创建TMP1列表,然后迭代它。这也没用,您可以直接在要添加到列表中的元素上执行代码。
对ElementList的第一次迭代是Country元素的列表,但是您迭代的元素称为cont(= continent),它是一个Continent而不是Country。是否打算使用国家/地区类来涵盖:国家和大陆?你打算有一个像“大陆包含许多国家”的树形结构吗?
从原始问题解决问题的最终代码应该是这样的:
public Country highestGdp(String continent){
Country countryWithMaxGdp = null;
for(Country cont: ElementsList ){
if(cont.getContinent().equals(continent)){
if(countryWithMaxGdp == null || countryWithMaxGdp.getGDP() < cont.getGDP()){
countryWithMaxGdp = cont;
}
}
}
return countryWithMaxGdp;
}