ArrayList循环仅输出最后一项[重复]

Posted

技术标签:

【中文标题】ArrayList循环仅输出最后一项[重复]【英文标题】:ArrayList looping only outputs the last item [duplicate] 【发布时间】:2020-07-07 00:13:39 【问题描述】:

我正在尝试遍历一个ArrayList,并将每个索引值与默认值进行比较,如果索引值与默认值匹配,我想返回true,唯一的问题是,它总是只返回true添加的索引项。由于我的类没有 main 方法,所以我在类构造函数初始化期间添加了这些值。

  public class CountryFinderImpl implements CountryFinder

    List<String> Countries = new ArrayList<String>();



    public CountryFinderImpl() 

        Countries.add("canada");
        Countries.add("japan");
        Countries.add("usa");

    

    @Override
    public boolean forWeather(String country) 
        // TODO Auto-generated method stub
        country = country.toLowerCase();
        boolean c=false;


                for(int i=0; i<Countries.size();i++) 
                    if(Countries.get(i).equals(country)) 
                        //System.out.println(country+"Weather available");
                        c=true;
                    else 
                        //System.out.println(country+"weather unavilable");
                        c=false;
                    

                


        return c;
    


country 参数是从另一个类传递过来的,该类从用户那里获取国家值。

【问题讨论】:

在循环中:if(Countries.get(i).equals(country)) return true; 循环之后,return false; -- 所以如果循环中没有匹配项,则默认为 false 但是即使我在arraylist中传递了一些东西它仍然返回false,它只对arraylist中的最后一项返回true 循环可以替换为return countries.contains(country.toLowerCase()); 这个方法到底应该做什么?如果要从中返回多个值,则必须创建一个集合并返回它。 你的循环并没有在找到国家的时候停止,你需要打破循环,在c=true之后添加break; 【参考方案1】:

在循环的每次迭代中,您都会覆盖 c,而不管其值如何,因此您将始终返回最后一个元素的结果。一种解决方案是使用“提前返回”习语并在找到该项目时立即返回true

@Override
public boolean forWeather(String country) 
    country = country.toLowerCase();
    for (int i = 0; i < Countries.size() ;i++) 
         if (Countries.get(i).equals(country)) 
             return true;
         
    
    return false;

但是请注意,这只是 contains 方法的重新实现,所以您不妨直接使用它:

@Override
public boolean forWeather(String country) 
     return Countries.contains(country.toLowerCase());

【讨论】:

以上是关于ArrayList循环仅输出最后一项[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 ArrayList<String> 中的最后一项 [重复]

For循环仅返回最后一项

带有for循环的MVC视图仅返回最后一项

PHP Session仅保存最后一项[重复]

带有两个数组的Java foreach循环[重复]

我想删除数组中的所有项目,除了数组中的最后一项推送[重复]