For Loop不会为数组添加点

时间:2013-04-19 14:59:04

标签: java android string arraylist

我有以下for循环,它查看结果的字符串ArrayList,字符串中的每个项目都用“::”分隔:

ArrayList<String> resultsArray = MyClass.results;
        Integer numPoints = resultsArray.size();

        for (int i =0;i<numPoints;i++){
            String[] pointDetails = resultsArray.get(i).split("::");
            String pointName = pointDetails[0];
            String pointDescription = pointDetails[1];
            String coordinates = pointDetails[2];

        //Turn coordinates into geopoints
            String coord[] = coords.split(",");
            Integer  lng= (int) (Double.valueOf(coord[0]) * 1000000);
            Integer lat = (int)(Double.valueOf(coord[1])*1000000);
            GeoPoint gPoint = new GeoPoint(lng,lat);


         arrayPointName = new ArrayList <String>();
         arrayPointDescription = new ArrayList <String>();
         arrayPointCoords=new ArrayList<GeoPoint>();
         arrayPointName.add(pointName);
         arrayPointDescription.add(pointDescription);
     arrayPointCoords.add(gPoint);
          }

我知道我在初始字符串ArrayList中有20个点并打印出它的大小来检查它。但是,当我打印出新的arraylists时,例如arrayPointName,它们只包含一个点。知道为什么会这样吗?

2 个答案:

答案 0 :(得分:7)

看看这段代码:

arrayPointName = new ArrayList <String>();
arrayPointDescription = new ArrayList <String>();
arrayPointCoords=new ArrayList<GeoPoint>();

这三个语句 - 为变量分配新的空ArrayList引用 - 正在循环的每次迭代上执行。

他们应该在循环之前来:你只需要初始化一次变量(创建三个列表),然后在每次迭代时添加一个新项目。

作为旁注,像这样填充多个集合通常是一个坏主意。通常最好创建一个封装相关数据的单一类型(在这种情况下为名称,描述,坐标),然后创建该类型项目的单个集合。这通常更容易使用。

答案 1 :(得分:0)

你使用coords作为ArrayList而不启动它。你也为每个迭代arrayPointName,arrayPointDescription和arrayPointCoords启动,这就是为什么它们丢失了在前一次迭代中创建的值。他们应该在开始循环前一次启动juste

如果你给我们一个resultsArray strring的样本,那么很容易帮到你。