2014-02-14 45 views
0

我有點新來adt和開發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 

如果需要任何代碼,請告訴我和我會放棄它。謝謝你的幫助!

編輯:

下面是代碼

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如在現實生活中)

UPDATE 1

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

問題異常在131行

+0

的範圍我知道這意味着什麼我只是不確定在代碼中哪裏是錯誤。我雖然我已經檢查過...也許我會再次檢查。 – redlime9

相關問題