2014-02-14 2 views
0

Я новичок в разработке и разработке java-приложений. Но я пытаюсь сделать викторину. Однако по какой-то причине, когда я нажимаю кнопку, она беспорядочно говорит, что к сожалению ваше приложение остановилось.Приложение остановлено Ошибка Ошибка Logcat

Но проблема в том, что это не происходит в одном и том же месте. Я встречаюсь с фактической частью викторины) и даже иногда на главном экране.

Я замечаю, что есть некоторые ошибки журнала, но, поскольку я новичок, я не знаю, как это исправить.

Для первой картины, здесь ошибка журнала кошки:

02-14 18:22:27.146: E/AndroidRuntime(7346): FATAL EXCEPTION: main 
02-14 18:22:27.146: E/AndroidRuntime(7346): java.lang.ArrayIndexOutOfBoundsException: length=5; index=5 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at vApp.theperiodictablequiz.QuizActivity.ansGen(QuizActivity.java:131) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at vApp.theperiodictablequiz.QuizActivity$4.onClick(QuizActivity.java:204) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at android.view.View.performClick(View.java:4206) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at android.view.View$PerformClick.run(View.java:17357) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at android.os.Handler.handleCallback(Handler.java:725) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at android.os.Looper.loop(Looper.java:137) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-14 18:22:27.146: E/AndroidRuntime(7346):  at dalvik.system.NativeStart.main(Native Method) 

На второй картинке, вот ошибки журнала кошки:

02-14 18:22:13.146: E/AndroidRuntime(7138): FATAL EXCEPTION: main 
02-14 18:22:13.146: E/AndroidRuntime(7138): java.lang.RuntimeException: Unable to start activity ComponentInfo{vApp.theperiodictablequiz/vApp.theperiodictablequiz.QuizActivity}: java.lang.ArrayIndexOutOfBoundsException: length=5; index=7 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at android.os.Looper.loop(Looper.java:137) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at dalvik.system.NativeStart.main(Native Method) 
02-14 18:22:13.146: E/AndroidRuntime(7138): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=5; index=7 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at vApp.theperiodictablequiz.QuizActivity.ansGen(QuizActivity.java:131) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at vApp.theperiodictablequiz.QuizActivity.onCreate(QuizActivity.java:56) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at android.app.Activity.performCreate(Activity.java:5104) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
02-14 18:22:13.146: E/AndroidRuntime(7138):  ... 11 more 

Если какой-либо код необходим, пожалуйста скажите я и я его выдержу. Спасибо за любую помощь!

EDIT:

Вот код

package vApp.theperiodictablequiz; 

    import java.util.Random; 

    import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.TextView; 

public class QuizActivity extends Activity 
{ 
    Button Answer1; 
    Button Answer2; 
    Button Answer3; 
    Button Answer4; 
    TextView Question; 
    String correctAnswer=""; 
    int qindex=0; 



    String[] QuestionArray = 
    {"HelloBye", "What element has atomic number 1?", 
      "What is the second most abundant element on Earth?", 
      "Element with symbol Li ?", "Has 4 protons?" }; 
    String[] AnswerArray = 
    { "Enter the Lion","Hydrogen", "Helium", "Lithium", "Beryllium", "Boron", "Carbon", 
      "Nitrogen" }; 




    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_quiz); 




     Answer1 = (Button) findViewById(R.id.Answer1); 
     Answer2 = (Button) findViewById(R.id.Answer2); 
     Answer3 = (Button) findViewById(R.id.Answer3); 
     Answer4 = (Button) findViewById(R.id.Answer4); 
     Question= (TextView)findViewById(R.id.textView1); 
     Answer1.setOnClickListener(Achecker1); 
     Answer2.setOnClickListener(Achecker2); 
     Answer3.setOnClickListener(Achecker3); 
     Answer4.setOnClickListener(Achecker4); 



     ansGen(); 

    } 


    public void ansGen() 
    { 
     int AnsArraylen=AnswerArray.length;  
     Random randomizer=new Random(); 
     int[] AnsVal=new int[4]; 
     int numchecker=0; 

     for (int x=0;x<4;x+=1) 
     { 
      int tempVal=randomizer.nextInt((AnsArraylen)); 

      if (tempVal==AnsVal[0]) 
      { 
       numchecker=1; 
      }  
      if (tempVal==AnsVal[1]) 
      { 
       numchecker=1; 
      } 
      if (tempVal==AnsVal[2]) 
      { 
       numchecker=1; 
      } 
      if (tempVal==AnsVal[3]) 
      { 
       numchecker=1; 
      } 

      if (numchecker==1) 
      { 
       x-=1; 
      } 

      if (numchecker==0) 
      { 
       AnsVal[x]=tempVal; 
       numchecker=0; 
      } 
      numchecker=0; 
     } 
     Answer1.setText(AnswerArray[AnsVal[0]]); 
     Answer2.setText(AnswerArray[AnsVal[1]]); 
     Answer3.setText(AnswerArray[AnsVal[2]]); 
     Answer4.setText(AnswerArray[AnsVal[3]]); 
     int qpick=randomizer.nextInt(4); 


     if(qpick==0) 
     { 
      qindex=AnsVal[0]; 
      correctAnswer=AnswerArray[AnsVal[0]]; 
     } 
     if(qpick==1) 
     { 
      qindex=AnsVal[1]; 
      correctAnswer=AnswerArray[AnsVal[1]]; 
     } 
     if(qpick==2) 
     { 
      qindex=AnsVal[2]; 
      correctAnswer=AnswerArray[AnsVal[2]]; 
     } 
     if(qpick==3) 
     { 
      qindex=AnsVal[3]; 
      correctAnswer=AnswerArray[AnsVal[3]]; 
     } 

     Question.setText(QuestionArray[qindex]); 

     //Quesgen(qindex); 
    } 

    View.OnClickListener Achecker1 = new View.OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
      System.out.println("Button1"); 
      if(Answer1.getText()==correctAnswer) 
      { 
       System.out.println("YESYESYESYESYESYESYE1"); 
       ansGen(); 
      } 
      else 
      { 
       System.out.println("Fail1"); 
      } 
     } 
    }; 


    View.OnClickListener Achecker2 = new View.OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
      System.out.println("Button2"); 
      if(Answer2.getText()==correctAnswer) 
      { 
       System.out.println("YESYESYESYESYESYESYE2"); 
       ansGen(); 
      } 
      else 
      { 
       System.out.println("Fail2"); 
      } 
     } 
    }; 

    View.OnClickListener Achecker3 = new View.OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
      System.out.println("Button3"); 
      if(Answer3.getText()==correctAnswer) 
      { 
       System.out.println("YESYESYESYESYESYESYE3"); 
       ansGen(); 
      } 
      else 
      { 
       System.out.println("Fail3"); 
      } 
     } 
    }; 

    View.OnClickListener Achecker4 = new View.OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
      System.out.println("Button4"); 
      if(Answer4.getText()==correctAnswer) 
      { 
       System.out.println("YESYESYESYESYESYESYE4"); 
       ansGen(); 
      } 
      else 
      { 
       System.out.println("Fail4"); 
      } 
     } 
    }; 


    public void Quesgen(int qindex) 
    { 
     Question.setText(QuestionArray[qindex]); 
    } 




    public void delay() 
    { 
     for (long x = 1; x < 90000000; x += 1) 
     { 

     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.quiz, menu); 
     return true; 
    } 

} 
+2

Можем ли мы увидеть ваш основной метод? – BitNinja

+0

По-видимому, вы используете массив с меньшим количеством элементов, чем значение, которое вы пытаетесь использовать. Пожалуйста, отправьте код в 'QuizActivity' – cosmincalistru

+0

Да, код необходим. Ваша проблема в том, что вы пытаетесь получить доступ к элементу вашего массива с недопустимым индексом (либо < 0 or > = array.length (второй вариант в ваших случаях)) –

ответ

0

ArrayIndexOutOfBoundsException это исключение, которое вызывается, когда вы хотите получить элемент из arrat, что вне диапазона массива.

Например (правильный код для получения последнего элемента массива:

int []array = {1,2,3,4,5,6,7,8,9}; 
int lastElement = array[8]; 

Неверный код:

int []array = {1,2,3,4,5,6,7,8,9}; 
int lastElement = array[9]; 

Итерация в массиве начинается с 0 (не 1, как и в реальной жизни)

ОБНОВЛЕНИЕ 1

at vApp.theperiodictablequiz.QuizActivity.ansGen(QuizActivity.java:131) 

Исключение проблемы вызвано в 131 строке

+0

Я знаю, что это значит. Я просто не уверен, где в моем коде это ошибка. Я, хотя я уже проверил ... Может быть, я еще раз проверю. – redlime9

Смежные вопросы