在Android中使用MPCharts绘制LineChart,并抛出"IndexOutOfBoundsException: Index: 25, Size: 25"
。遍历了示例,但仍然遇到相同的错误。发现下面的代码
private void drawLineChart() {
List<Entry> entries = new ArrayList<Entry>();
System.out.println("valueList"+valueList.size());
for (int i = 0; i <= valueList.size(); i++){
entries.add(new Entry(valueList.get(i),(float)i));
}
LineChart lineChart = findViewById(R.id.myLineChart);
Description description = new Description();
description.setText("My Line Chart");
lineChart.setDescription(description);
LineDataSet lineDataSet = new LineDataSet(entries, "Line chart");
lineDataSet.setDrawFilled(true);
lineDataSet.setColors(ColorTemplate.COLORFUL_COLORS);
LineData lineData = new LineData(lineDataSet);
lineData.setValueFormatter(new ReportChartXAxisValueFormater(getXAxisValues()));
lineChart.setData(lineData);
lineChart.animateXY(2000,2000);
lineChart.invalidate();
}
ValueList具有25个值
答案 0 :(得分:1)
将条件从(较低或相等)更改为
i <= valueList.size()
到(下):
i < valueList.size()
// change char here (from <= to < )
// ||
// \/
for (int i = 0; i < valueList.size(); i++){
// your code there
}
您有25
个元素。列表的大小为25
。
但是索引从0
到24
。
索引从0开始。
因此对于5
元素,您具有以下位置:
element: "ABC", "DEF", "GHI", "JKL", "MNO",
position: 0 1 2 3 4
大小为5
(因为您有5
个元素)。
但是最后一个索引是4
。这就是您的迭代器无法达到列表大小的原因。
答案 1 :(得分:0)
这是问题
for (int i = 0; i <= valueList.size(); i++)
应该是
for (int i = 0; i < valueList.size(); i++)
Java索引始于0
,结束于size()-1
,因此当您使用get()
(25英寸)时,IndexOutOfBoundsException
调用将抛出size()
这种情况。
答案 2 :(得分:0)
索引从零开始,以大小1结束
for (int i = 0; i <= valueList.size(); i++){...
您正在使用<=
,它还将包括最后一个不会出现的索引,因此是例外。将<=
替换为<
或使用size()-1