Форум программистов, компьютерный форум, киберфорум
Наши страницы

Ошибка ArrayIndexOutOfBoundsException - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Кривые в OpenGL SE 1.0 http://www.cyberforum.ru/android-dev/thread1238928.html
Помогите, пожалуйста, мне очень нужна ваша помощь. Как в Android с помощью OpenGL ES 1.0 сделать движение картинки по траектории, являющейся кривой? Как создать кривую не средствами Canvas, а именно...
Программирование Android Не могу изменить высотку и ширину Image программно На экране есть компонент ImageView, в него загружается картинка из drawable(R.drawable.image_1). Как изменить width и height этой картинки? По аналогии с кнопкой не работает button_1.setWidth(100); http://www.cyberforum.ru/android-dev/thread1238842.html
Парсинг изображения с сайта Программирование Android
Здравствуйте. По практике в универе, нужно написать клиент под сайт. Я выбрал сайт, на котором 90% контента - картинки. Я только учусь кодить под андроид, поэтому "дуб-дубом" :) Пробую с помощью...
Обработчик нажатия в ExpandableListView Программирование Android
Есть ExpandableListView сделанный по примеру... Т.е. есть разворачиваемый список второго уровня, как повесить обработчик нажатия для каждого элемента списка "child", чтобы например запустить...
Программирование Android С чего начать разработку приложений http://www.cyberforum.ru/android-dev/thread1238499.html
Раньше не разрабатывал под Android. Хочу сделать не сложное переложения но не знаю с чего начать и что почитать конкретно то что мне надо (не представляю как это правильно прогуглить). Суть:...
Программирование Android Очень тормозит эмулятор в эклипсе Привет Друзья! Начал изучать Андроид, пока на стадии настройки среды выполнения. Проблема: -скачал эклипс специально для разработки под андроид со встроенным эмулятором, выделил памяти 1 Гб,... подробнее

Показать сообщение отдельно
Belle7
0 / 0 / 0
Регистрация: 06.08.2014
Сообщений: 5
06.08.2014, 23:15  [ТС]
Доброго времени суток.
Понимаю, что обращаюсь с данной проблемой во второй раз. Однако в прошлый раз устранить ошибку, к сожалению, никто помочь не смог. Именно поэтому решила выложить весь код с описанием.

Программа - тест. На главном экране - MainActivity находятся две кнопки: начать и выход. При нажатии на "начать" должен запускаться тест из файла ресурсов (массив, в котором содержатся вопросы, варианты ответов и верные ответы на каждый из вопросов). Однако при нажатии на "начать" выходит ошибка с текстом: java.lang.ArrayIndexOutOfBoundsException length=8 index=-2 (причем при каждом запуске программы значения index разные).

MainActivity скидывать не буду.

Вот код:

Массив, в котором и находятся вопросы, варианты ответов и верные ответы на тест.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="Questions">
        <item>/nQuestion1/Variant11/Variant12/Variant13/Variant14/2/</item>
        <item>/nQuestion2/Variant21/Variant22/Variant23/Variant24/2/</item>
        <item>/nQuestion3/Variant31/Variant32/Variant33/Variant34/3/</item>
        <item>/nQuestion4/Variant41/Variant42/Variant43/Variant44/4/</item>
        <item>/nQuestion5/Variant51/Variant52/Variant53/Variant54/1/</item>
        <item>/nQuestion6/Variant61/Variant62/Variant63/Variant64/2/</item>
        <item>/nQuestion7/Variant71/Variant72/Variant73/Variant74/3/</item>
        <item>/nQuestion8/Variant81/Variant82/Variant83/Variant84/4/</item>
    </array>
</resources>
Файл strings.xml
XML
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">OUaT Quiz</string>
    <string name="note1">You have picked</string>
    <string name="note2">right answers from</string>
    <string name="note3">Your rating is</string>
</resources>
Собственно, главный файл QuizActivity
Здесь распишу все подробнее:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package com.example.ouatquiz;
 
import android.app.Activity;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsoluteLayout;
import android.widget.Button;
import android.widget.Toast;
 
public class QuizActivity extends Activity implements OnClickListener {
    
        //программно создаем экран, при этом задаем параметры экрана и параметры для AbsoluteLayout
    private AbsoluteLayout Abs;
    private Button Question;
    private Button[] Answers=new Button[4];
    private double width;
    private double height;
 
        //переменный для хранения констант (кол-во вопросов, ответов и константа для разделителя в arrays.xml)
    private static final int QUESTIONS=8;
    private static final int VARIANTS=4;
    private static final char DELIMITER='/';
    private String[][] AnsMatrix=new String[VARIANTS][QUESTIONS];
    private int[] RightAnswers=new int[QUESTIONS];
    private String[] Ques=new String[QUESTIONS];
        
        //переменная, хранящая базу
    private TypedArray Base;
    private int time=0;
    private int total_time=3;
 
        //счетчики верных и неверных ответов
    private int right=0;
    private int wrong=0;
 
        //переменная, равная номеру верного ответа
    private int current_right=0;
    private AbsoluteLayout.LayoutParams[] params=new AbsoluteLayout.LayoutParams[VARIANTS+1];
 
   //программно создаем Layout
    @Override
    public void onCreate(Bundle savedInstanceState) {
        try{
           super.onCreate(savedInstanceState);
           Abs=new AbsoluteLayout(this);
           setContentView(Abs);
           Display display = getWindowManager().getDefaultDisplay(); 
           width=display.getWidth();
           height=display.getHeight();
           Question= new Button(this);
           params[0]=new AbsoluteLayout.LayoutParams(
                 (int)width,(int)height/4,0,0
           );
           Question.setLayoutParams(params[0]);
           Abs.addView(Question);
           Question.setOnClickListener(this);
           
           for (int i=1;i<VARIANTS+1;i++){
              int k=i%2;
              int m;
              if (i<3) m=1;
              else{
                  m=2;
              }
              Answers[i-1]= new Button(this);
              params[i]=new AbsoluteLayout.LayoutParams(
                    (int)width/2,(int)height/4,(int)(k*width/2),(int)(m*height/4)
              );
              Answers[i-1].setLayoutParams(params[i]);
              Abs.addView(Answers[i-1]);
              Answers[i-1].setOnClickListener(this);
           }
          
 
           LoadQuestions();
           LoadQuestion();
 
        }
        catch(Exception e){
            Toast.makeText(this, e+"", Toast.LENGTH_LONG).show();
        }
    }
    
    //выбирает случайный вопрос, пишет на кнопки соответствующие тексты, и заносит в специальную переменную     правильный ответ. qs - номер случайно выбранного вопроса.
          private void LoadQuestion() {
         int qs=(int)System.currentTimeMillis()%QUESTIONS;
         Question.setText(Ques[qs]);
         for (int i=0;i<VARIANTS;i++){
            Answers[i].setText(AnsMatrix[i][qs]);
         }
         current_right=RightAnswers[qs]-1;
   }
    
    //функция для загрузки всех вопросов из базы
   private void LoadQuestions(){
        Resources res=getResources();
        Base=res.obtainTypedArray(R.array.Questions);
        for (int i=0;i<QUESTIONS;i++){
            Ques[i]=getSubstringBetweenDelimiters(0,1,Base.getString(i));
            for (int j=0;j<VARIANTS;j++){
                AnsMatrix[j][i]=getSubstringBetweenDelimiters(j+1,j+2,Base.getString(i));
            }
            RightAnswers[i]=Integer.parseInt(getSubstringBetweenDelimiters(VARIANTS+1,VARIANTS+2,Base.getString(i)));
        }
    }
   
    //принимает 3 параметра: исходную строку, и два целых числа и определяют подстроку, лежащую в исходной   строке между теми по счету разделителями, которые определяют первые 2 аргумента.
    private String getSubstringBetweenDelimiters(int k, int m, String str){
        int index1=0;
        int index2=0;
        int len=str.length();
        int dels=0;
        for (int i=0;i<len;i++){
            if (str.charAt(i)==DELIMITER){
                dels++;
            }
            if (dels==k){
                index1=i;
            }
            if (dels==m){
                index2=i;
            }
        }
        
        return str.substring(index1+2, index2+1);
    }
 
        //обработчик нажатия на кнопку
    @Override
    public void onClick(View arg0) {
        
        if (arg0==Question){
            wrong++;
        }
        else{
            wrong++;
            for (int i=0;i<VARIANTS;i++){
                if (arg0==Answers[i]){
                    if (current_right==i){
                        wrong--;
                        right++;
                    }
                }
            }
        }
        time++;
        LoadQuestion();
        if (time==total_time){
            Stats();
            time=0;
            right=0;
            wrong=0;
        }
    }
    
 
        //функция для вывода рейтинга
    private void Stats() {
        // TODO Auto-generated method stub
        double rating=Math.round(((double)right/((double)right+(double)wrong))*100);
        String stat="";
        stat+=getString(R.string.note1);
        stat+=" "+right+" ";
        stat+=getString(R.string.note2);
        stat+=" "+total_time+". ";
        stat+=getString(R.string.note3);
        stat+=" "+(rating+"").substring(0,(rating+"").length()-2);
        Toast.makeText(this, stat, Toast.LENGTH_LONG).show();
    }
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru