在我的应用中,我试图让我的活动来更改按钮上的文本。当我在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};