0

我有以下 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 个点,并且已经打印出它的大小来检查这一点。但是,当我打印出新的数组列表(例如 arrayPointName)时,它们只包含一个点。知道为什么会这样吗?

4

2 回答 2

7

看看这段代码:

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

这三个语句——为你的变量分配新的、空的引用——在你的循环的每次迭代ArrayList中都被执行。

它们应该出现您的循环之前:您只想初始化一次变量(创建三个列表),然后在每次迭代中添加一个新项目。

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

于 2013-04-19T15:01:24.093 回答
0

您将坐标用作 ArrayList 而没有启动它。您还为每次迭代 arrayPointName、arrayPointDescription 和 arrayPointCoords 启动,这就是为什么它们丢失了在上一次迭代中创建的值。他们应该在开始循环之前启动一次

如果您给我们一个 resultsArray 字符串的样本,它将很容易帮助您。

于 2013-04-19T15:12:06.567 回答