在我的应用中,我正在尝试让我的活动更改按钮上的文字。当我在onCreate()中调用ansGen()方法时,我得到一个黑屏。 过了一会儿,出现错误,应用程序关闭。
但是当onCreate()中的ansGen()方法调用被注释时,它显示正常(显然没有ansGen()方法的函数。
这是我的代码 with ansGen()方法(没有import和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");
}
我到处搜寻都没有用。
感谢您的帮助!
答案 0 :(得分:1)
当您致电randomizer.nextInt(AnsArraylen)
时,您可以获得0到3之间的值,包括0和3。如果此tempVal
为0,那么您可以将AnsArray [x]设置为当前tempVal
。但是,当tempVal
为1时会发生什么?你不进入那些if
,除了最后一个,它将x设置为-1,因此在下一个循环迭代中它将再次变为0。除了这对你有意义之外,错误在于下一行。在这种情况下你正在做:
tempStringy=AnswerArray[AnsVal[0]];
但AnsVal[0]
仍为-1
。你正试图这样做:
AnswerArray[-1]
这就是你得到例外的地方。将其包裹在try-catch中并打印堆栈跟踪以确认。也许您想将AnsVal
初始化为:
int[] AnsVal={0,1,2,3};
答案 1 :(得分:0)
我测试了你的代码并找到了
if (numchecker==1)
{
x-=1;
}
你的代码中的这个条件使得x for循环的值为1,所以每次x将为值2时它将是不定式循环,这个条件使得x = 1所以循环x < 4
中的条件不会发生,您将收到带有(等待或关闭程序)消息的消息
我不知道你的代码逻辑,所以试着处理它