在我的应用中,我试图让我的活动来更改按钮上的文本。当我在onCreate()中调用ansGen()方法时,出现黑屏。
一段时间后,出现错误,应用程序关闭。

但是,当对onCreate()中的ansGen()方法调用进行注释时,它会显示正常(显然没有ansGen()方法的功能。

这是我的带有ansGen()方法的代码(没有导入和onCreateOptionsMenu):

public class QuizActivity extends Activity
{
Button Answer1;
Button Answer2;
Button Answer3;
Button Answer4;

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




public String tempStringy="";

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

    int AnsArraylen=AnswerArray.length;



    Answer1 = (Button) findViewById(R.id.Answer1);
    Answer2 = (Button) findViewById(R.id.Answer2);
    Answer3 = (Button) findViewById(R.id.Answer3);
    Answer4 = (Button) findViewById(R.id.Answer4);

    //AnswerArray[randAnswers[0]]


    Answer1.setText("Hello");
    Answer2.setText("Hello");
    Answer3.setText("Hello");
    Answer4.setText("Hello");


    **ansGen(AnsArraylen);**

}


public void ansGen(int AnsArraylen)
{
    Random randomizer=new Random();
    int[] AnsVal={-1,-1,-1,-1};
    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==0)
        {
            AnsVal[x]=tempVal;
        }

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

    }

    tempStringy=AnswerArray[AnsVal[0]];
    //Answer1.setText("Hup");
}


我到处搜寻都无济于事。

感谢您的任何帮助!

最佳答案

调用randomizer.nextInt(AnsArraylen)时,您可以获取0到3之间的值(包括0和3)。如果此tempVal为0,就可以了,因为只需将AnsArray [x]设置为当前的tempVal。但是,例如tempVal为1时会发生什么?除了最后一个将x设置为-1的if之外,您什么都不用,因此在下一次循环迭代中它将再次变为0。除了这是否对您有意义之外,错误还在于下一行。在这种情况下,您正在做:

tempStringy=AnswerArray[AnsVal[0]];


但是AnsVal[0]仍然是-1。因此,您正在尝试执行以下操作:

AnswerArray[-1]


那就是您得到异常的地方。将其包装在try-catch中,然后打印堆栈跟踪以进行确认。也许您想将AnsVal初始化为:

int[] AnsVal={0,1,2,3};

08-17 21:35