【问题标题】:IndexOutOfBounds Exception when filling multidimensional array填充多维数组时出现 IndexOutOfBounds 异常
【发布时间】:2013-09-07 00:35:42
【问题描述】:

我有一些正在循环的 xml 数据。我想将每个“条目”存储在一个数组点中,以便通过 intent.putExtras() 查看它。我的数据有 3 个元素:latlon、name、description。我想把每个都放在我的数组中。所以我这样设置:markerInfo[i][0] = Loc;等等...像这样:

 final List<XmlDom> entries = xml.tags("Placemark");
            int i = entries.size();
int j=0;
            for (XmlDom entry : entries) {
                XmlDom lon = entry.tag("longitude");
                XmlDom lat = entry.tag("latitude");
                XmlDom name = entry.tag("name");
                XmlDom desc = entry.tag("description");

                String cdatareplace = desc.toString();
                String description = cdatareplace.replace("<![CDATA[", "");
                description = description.replace("]]>", "");

                final String firename = name.text();
                final String firedesc = description;

                String geoLon = lon.text();
                String geoLat = lat.text();

                String coor = lat + "," + lon;
                // Log.e("COORS: ", coor);

                double lati = Double.parseDouble(geoLat);
                double lngi = Double.parseDouble(geoLon);

                LOCATION = new LatLng(lati, lngi);

                String Loc = LOCATION.toString();

                String[][] markerInfo = new String[i][3];

                markerInfo[j][0] = Loc; 
                markerInfo[j][1] = firename;
                markerInfo[j][2] = firedesc;

                Log.e("MARKERINFO",markerInfo[j][0]);
                Log.e("MARKERINFO",markerInfo[j][1]);
                Log.e("MARKERINFO",markerInfo[j][2]);

                map.addMarker(new MarkerOptions()
                        .position(LOCATION)
                        .title(markerInfo[j][1])
                        .snippet(markerInfo[j][2])
                        .icon(BitmapDescriptorFactory
                                .fromResource(R.drawable.wfmi_icon48)));
                map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
                    @Override
                    public void onInfoWindowClick(Marker arg0) {
                        // Show full description in new activity.

                        // fireDesc(arg0.getTitle(), arg0.getSnippet());

                        Intent i = new Intent(Map.this, MapSingleActivity.class);
                        i.putExtra("name", arg0.getTitle())
                                .putExtra("description", arg0.getSnippet())
                                .putExtra("lat", arg0.getPosition().latitude)
                                .putExtra("lon", arg0.getPosition().longitude);
                        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);
                    }
                });
j++;
            }

我的数组索引越界。我想如果我用 entry.size() 填充它就不会有问题,所以也许我没有告诉它有多大正确?

感谢您的帮助

【问题讨论】:

  • j 定义在哪里?
  • @Pawel 就在 for 循环上方

标签: java android arrays multidimensional-array indexoutofboundsexception


【解决方案1】:

你需要确保第二个维度也足够大

通过将markerInfo 的声明更改为:

String[][] markerInfo = new String[i][3];

目前您只创建 iString 数组。使用上面的代码,您将创建 i 数组,每个数组可以容纳三个 String 对象。

此外,此时您正在写入数组边界之外的最后一个位置。

您需要将其更改为写入可用位置。如果您尝试写入最后一个可用位置,即i-1

markerInfo[i-1][0] = Loc; 
markerInfo[i-1][1] = firename;
markerInfo[i-1][2] = firedesc;

然而,看看您的代码,您似乎想在循环外声明markerInfo,并创建一个计数器变量,您可以在循环的每一步递增。

【讨论】:

  • 啊,你在编辑之前看到了我的帖子。对不起。我在那里添加了它,但仍然让数组超出范围......
  • 感谢您的帮助。我正在尝试传递一些数据,并认为这可能是一种方式......但看起来我仍然只能在填充 mdarray 之前得到我得到的东西......等等......
【解决方案2】:

数组的第二个大小是 0 - new String[i][0]。然后你尝试在位置 0,1,2 上插入一些东西,这是不可用的。

即使你写new String[i][3],那么最大索引也是i-1

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 2013-11-26
    • 2014-01-10
    • 1970-01-01
    • 2015-09-29
    • 2011-01-11
    相关资源
    最近更新 更多