问题描述
我做Android的一个简单的问答游戏,现在有只有10题和40的答案。 (4回答每个问题)
有时,当我打一个按钮,它给了我一个以上的正确答案的时间,也可能连做它时,答案是不正确的。
任何想法有什么错在这个code?原因我不是调用isCorrect布尔方法多次(一键)。
code:
公共类ETBetaActivity扩展活动实现View.OnClickListener { 按钮ANSWER_1,
ANSWER_2,ANSWER_3,
ANSWER_4,主; TextView的q_textview,
小费; 私人字符串A1,A2,A3,A4 =; 私人INT I1 = 0;
公共静态INT正确= 0; 私人布尔活着= TRUE; MediaPlayer的button_click; 私有String [] =问题
{Q1
Q2
Q3
第四季度,
Q5,// 5
Q6
Q7
Q8
Q9
Q10// 10
};
公共静态INT question_amount = 10;
私有String [] = answers_correct
{正确答案 - 1,
正确答案 - 2,
正确答案 - 3
正确答案 - 4,
正确答案 - 5,
正确答案 - 6,
正确答案 - 7
正确答案 - 8
正确答案 - 9
正确答案 - 10
}; 私有String [] [] = answers_wrong
{{Q1-1,Q1-2,Q1-3},
{Q2-1,Q2-2,Q2-3},
{Q3-1,Q3-2,Q3-3},
{Q4-1,Q4-2,Q4-3},
{Q5-1,Q5-2,Q5-3},
{Q6-1,Q6-2,Q6-3},
{Q7-1,Q7-2,Q7-3},
{Q8-1,Q8-2,Q8-3},
{Q9-1,Q9-2,Q9-3},
{Q10-1,Q10-2,Q10-3} };
清单<串GT; question_list =新的ArrayList<串GT;();
清单<串GT; answer_list_correct =新的ArrayList<串GT;();
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
的getData();
游戏(I1);
}
@覆盖
公共无效的onClick(查看视图){
如果(活着== FALSE){
// startActivity(新意图(com.aleksei.etb.END));
返回;
}
button_click = MediaPlayer.create(这一点,R.raw.button_click);
button_click.start();
开关(view.getId()){
案例R.id.button5://主
打破;
案例R.id.button1:// ANSWER_1
如果(isCorrect(1))
正确++;
打破;
案例R.id.button2:// ANSWER_2
如果(isCorrect(2))
正确++; 打破;
案例R.id.button3:// ANSWER_3
如果(isCorrect(3))
正确++; 打破;
案例R.id.button4:// ANSWER_3
如果(isCorrect(4))
正确++;
打破; 默认:
打破;
}
游戏(I1);
tip.setText(正确的答案:+正确的);
}
公共静态INT getResults(){
int值=(INT)Math.floor((*正确5)/ question_amount);
如果(价值< = 0)
返回1;
其他
返回值;
} 私人布尔isCorrect(INT按钮){
的for(int i = 0; I< answers_correct.length;我++){
如果(按钮== 1和;&放大器; A1 == answers_correct [Ⅰ]
||按钮== 2和;&放大器; A2 == answers_correct [I]
||按钮== 3和;&放大器; A3 == answers_correct [I]
||按钮== 4和&放大器; A4 == answers_correct [I])
返回true;
}
返回false;
} 私人无效游戏(INT Q){
如果(I1 == question_amount){//没有问题
startActivity(新意图(com.aleksei.etb.END));
活着= FALSE;
返回;
}
尝试{
main.setText(不知道);
字符串answer_list [] = {
answers_correct [Q],answers_wrong [Q] [0],answers_wrong [问] [1],answers_wrong [问] [2]
}; Collections.shuffle(Arrays.asList(answer_list));
answer_1.setText(answer_list [0]);
answer_2.setText(answer_list [1]);
answer_3.setText(answer_list [2]);
answer_4.setText(answer_list [3]);
A1 = answer_list [0];
A2 = answer_list [1];
A3 = answer_list [2];
A4 = answer_list [3];
q_textview.setText(问题[Q]);
}赶上(例外前){}
I1 ++;
}
私人无效的getData(){
//获取数据
主要=(按钮)findViewById(R.id.button5);
ANSWER_1 =(按钮)findViewById(R.id.button1);
ANSWER_2 =(按钮)findViewById(R.id.button2);
ANSWER_3 =(按钮)findViewById(R.id.button3);
ANSWER_4 =(按钮)findViewById(R.id.button4);
q_textview =(的TextView)findViewById(R.id.question);
尖端=(的TextView)findViewById(R.id.answ1); //使得按键,实际工作
main.setOnClickListener(本);
answer_1.setOnClickListener(本);
answer_2.setOnClickListener(本);
answer_3.setOnClickListener(本);
answer_4.setOnClickListener(本); //重新设置文本
//提醒自己:更换另一ContectView
main.setText(开始!);
answer_4.setText();
answer_3.setText();
answer_2.setText();
answer_1.setText();
tip.setText();
} }
考虑下面的变化,看看它是否提高了:
私人INT questionNumber = -1; 私人无效游戏(INT Q){
...
questionNumber = Q;
q_textview.setText(问题[Q]);
...
}私人布尔isCorrect(INT按钮){
如果(按钮== 1和;&放大器; a1.equals(answers_correct [questionNumber])
||按钮== 2和;&放大器; a2.equals(answers_correct [questionNumber])
||按钮== 3和;&放大器; a3.equals(answers_correct [questionNumber])
||按钮== 4和&放大器; a4.equals(answers_correct [questionNumber]))
返回true;
}
返回false;
}
存放问题编号为现场消除了为
循环遍历所有的问题。
你应该总是使用 String.equals
而不是 ==
。
I made a simple quiz game for android, right now there's only 10 questions, and 40 answers. (4 answers for each question)Sometimes when I hit a button it gives me more than one correct answer at a time, also it might even do it when answer's not correct.Any idea what's wrong in this code? Cause Im not calling the isCorrect boolean method multiple times (in one click).
Code:
public class ETBetaActivity extends Activity implements View.OnClickListener {
Button answer_1,
answer_2,answer_3,
answer_4,main;
TextView q_textview,
tip;
private String a1,a2,a3,a4 = "";
private int i1 = 0;
public static int correct = 0;
private boolean alive = true;
MediaPlayer button_click;
private String[] questions =
{"Q1",
"Q2",
"Q3",
"Q4",
"Q5", //5
"Q6",
"Q7",
"Q8",
"Q9",
"Q10" //10
};
public static int question_amount = 10;
private String[] answers_correct =
{"Correct answer - 1",
"Correct answer - 2",
"Correct answer - 3",
"Correct answer - 4",
"Correct answer - 5",
"Correct answer - 6",
"Correct answer - 7",
"Correct answer - 8",
"Correct answer - 9",
"Correct answer - 10"
};
private String[][] answers_wrong =
{ {"Q1-1", "Q1-2" , "Q1-3"},
{"Q2-1", "Q2-2" , "Q2-3"},
{"Q3-1", "Q3-2" , "Q3-3"},
{"Q4-1", "Q4-2" , "Q4-3"},
{"Q5-1", "Q5-2" , "Q5-3"},
{"Q6-1", "Q6-2" , "Q6-3"},
{"Q7-1", "Q7-2" , "Q7-3"},
{"Q8-1", "Q8-2" , "Q8-3"},
{"Q9-1", "Q9-2" , "Q9-3"},
{"Q10-1", "Q10-2" , "Q10-3"}
};
List<String> question_list = new ArrayList<String>();
List<String> answer_list_correct = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getData();
Game(i1);
}
@Override
public void onClick(View view) {
if (alive == false) {
// startActivity(new Intent("com.aleksei.etb.END"));
return;
}
button_click = MediaPlayer.create(this, R.raw.button_click);
button_click.start();
switch(view.getId()){
case R.id.button5: //main
break;
case R.id.button1: //answer_1
if(isCorrect(1))
correct++;
break;
case R.id.button2: //answer_2
if(isCorrect(2))
correct++;
break;
case R.id.button3: //answer_3
if(isCorrect(3))
correct++;
break;
case R.id.button4: //answer_3
if(isCorrect(4))
correct++;
break;
default:
break;
}
Game(i1);
tip.setText("Correct answers: "+correct);
}
public static int getResults(){
int value = (int) Math.floor((correct*5)/question_amount);
if(value <= 0)
return 1;
else
return value;
}
private boolean isCorrect(int button){
for (int i = 0; i < answers_correct.length; i++){
if(button == 1 && a1 == answers_correct[i]
|| button == 2 && a2 == answers_correct[i]
|| button == 3 && a3 == answers_correct[i]
|| button == 4 && a4 == answers_correct[i])
return true;
}
return false;
}
private void Game(int q){
if(i1 == question_amount) { //no more questions
startActivity(new Intent("com.aleksei.etb.END"));
alive = false;
return;
}
try {
main.setText("Dunno");
String answer_list[] = {
answers_correct[q], answers_wrong[q][0] , answers_wrong[q][1] , answers_wrong[q][2]
};
Collections.shuffle(Arrays.asList(answer_list));
answer_1.setText(answer_list[0]);
answer_2.setText(answer_list[1]);
answer_3.setText(answer_list[2]);
answer_4.setText(answer_list[3]);
a1 = answer_list[0];
a2 = answer_list[1];
a3 = answer_list[2];
a4 = answer_list[3];
q_textview.setText(questions[q]);
} catch (Exception ex){}
i1++;
}
private void getData(){
//Getting the data
main = (Button) findViewById(R.id.button5);
answer_1 = (Button) findViewById(R.id.button1);
answer_2 = (Button) findViewById(R.id.button2);
answer_3 = (Button) findViewById(R.id.button3);
answer_4 = (Button) findViewById(R.id.button4);
q_textview = (TextView) findViewById(R.id.question);
tip = (TextView) findViewById(R.id.answ1);
//Making the buttons, actually work
main.setOnClickListener(this);
answer_1.setOnClickListener(this);
answer_2.setOnClickListener(this);
answer_3.setOnClickListener(this);
answer_4.setOnClickListener(this);
//Resets the text
//Note to self: Replace with another ContectView
main.setText("Begin!");
answer_4.setText("");
answer_3.setText("");
answer_2.setText("");
answer_1.setText("");
tip.setText("");
}
}
Consider the following changes and see if it improves:
private int questionNumber = -1;
private void Game(int q){
...
questionNumber = q;
q_textview.setText(questions[q]);
...
}
private boolean isCorrect(int button){
if(button == 1 && a1.equals(answers_correct[questionNumber])
|| button == 2 && a2.equals(answers_correct[questionNumber])
|| button == 3 && a3.equals(answers_correct[questionNumber])
|| button == 4 && a4.equals(answers_correct[questionNumber]))
return true;
}
return false;
}
Storing the question number as a field eliminates the for
loop over all the questions.You should always use String.equals
instead of ==
.
这篇关于为什么它调用方法“isCorrect”多次(的onClick),如果我按下按钮只有一次?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!