MPChart IndexOutOfBoundsException: индекс: 25, размер: 25 - PullRequest
0 голосов
/ 29 марта 2019

Использование MPCharts для построения LineChart в Android, его бросок "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 значений

Ответы [ 3 ]

1 голос
/ 29 марта 2019

Решение

Измените ваше состояние с (ниже или равно)

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. Вот почему ваш итератор не может достичь размера списка.

0 голосов
/ 29 марта 2019

Индекс начинается с нуля и заканчивается размером-1

for (int i = 0; i <= valueList.size(); i++){...

Вы используете <=, который также будет включать в себя последний индекс, которого не будет, таким образом, исключение.Замените <= на < или используйте size()-1

0 голосов
/ 29 марта 2019

Это проблема

for (int i = 0; i <= valueList.size(); i++)

должно быть

for (int i = 0; i < valueList.size(); i++)

Индексы Java начинаются с 0 и заканчиваются size()-1, поэтому вызов get() выдает IndexOutOfBoundsException при использовании size(), который в данном случае равен 25.

...