2014-02-14 46 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

相关问题