使用for-each循环查找指定大洲GDP最高国家的代码问题求助
解决ArrayList中查找指定大洲GDP最高国家的问题
嘿,我看你这段代码的逻辑走偏啦,咱们一步步理清楚问题,再写出正确的实现哈~
先说说原代码里的问题
- 每次找到符合目标大洲的国家,你就新建一个
TMP1列表只存当前这一个国家,然后在内层循环里比较,这完全没法实现“找同大洲所有国家里GDP最高”的需求,相当于每次只看了一个国家就结束了 - 内层循环里的
double max = 0;每次都会被重置为0,这样永远拿不到真正的最大值,甚至如果所有国家GDP都是负数的话,结果会完全错误 - 代码没有写完,也没有返回值,不符合方法的定义
正确的实现思路
其实根本不需要临时列表,只需要在遍历的时候维护一个“当前GDP最高的国家”变量就可以了:
- 初始化一个变量保存当前最高GDP的国家,初始值设为
null - 遍历整个
ElementsList,对每个国家先判断是否属于目标大洲 - 如果是目标大洲的国家,就和当前的最高GDP国家比较:
- 如果当前最高国家是
null(也就是第一个符合条件的国家),直接把它赋值为当前国家 - 否则比较两者的GDP,如果当前国家GDP更高,就更新最高国家变量
- 如果当前最高国家是
- 最后返回这个最高国家变量
完整代码示例
public Country highestGdp(String continent) { Country maxGdpCountry = null; for (Country country : ElementsList) { // 这里可以加空判断,避免空指针异常 if (country != null && continent != null && continent.equals(country.getContinent())) { if (maxGdpCountry == null) { // 第一个符合条件的国家,直接赋值 maxGdpCountry = country; } else { // 比较GDP,更新最高的那个 if (country.getGdp() > maxGdpCountry.getGdp()) { maxGdpCountry = country; } } } } // 如果没有找到对应大洲的国家,会返回null,你也可以根据需求抛出异常或者返回默认值 return maxGdpCountry; }
额外注意点
- 我加了
country != null和continent != null的判断,是为了避免调用getContinent()或者equals()时出现空指针异常,你可以根据实际场景调整 - 如果你的
getGdp()返回的是包装类Double,记得还要判断是否为null,避免NullPointerException - 如果需要处理“多个国家GDP相同且都是最高”的情况,你可以改成返回一个列表,但根据你的方法定义,应该是返回单个国家,所以直接返回第一个遇到的最高GDP国家即可
内容的提问来源于stack exchange,提问作者Nyx
相关产品推荐
相关产品推荐

