我应该如何使用Java对象引用?
我想为android做一个简单的测试 我被告知应该尝试使用对象引用 我不太确定怎么做,这就是我到目前为止所做的我应该如何使用Java对象引用?,java,android,Java,Android,我想为android做一个简单的测试 我被告知应该尝试使用对象引用 我不太确定怎么做,这就是我到目前为止所做的 package com.aleksei.etb; public class ETBetaActivity extends Activity implements View.OnClickListener { private String[] questions = {"Q1", "Q2", "Q3",
package com.aleksei.etb;
public class ETBetaActivity extends Activity implements View.OnClickListener {
private String[] questions =
{"Q1",
"Q2",
"Q3",
"Q4",
"Q5", //5
"Q6",
"Q7",
"Q8",
"Q9",
"Q10" //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"}
};
private int counter = 0;
public Button answer_1,
answer_2,answer_3,
answer_4,skip;
public TextView question_tv,
tip_tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getData();
quizBegin();
}
public static int getResults(){
return 5;
}
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.button5: //main
break;
case R.id.button1: //answer_1
break;
case R.id.button2: //answer_2
break;
case R.id.button3: //answer_3
break;
case R.id.button4: //answer_3
break;
}
}
private void getData(){
//Everything
skip = (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);
question_tv = (TextView) findViewById(R.id.question);
tip_tv = (TextView) findViewById(R.id.answ1);
//Buttons
skip.setOnClickListener(this);
answer_1.setOnClickListener(this);
answer_2.setOnClickListener(this);
answer_3.setOnClickListener(this);
answer_4.setOnClickListener(this);
//Text
skip.setText("Begin!");
answer_4.setText("");
answer_3.setText("");
answer_2.setText("");
answer_1.setText("");
tip_tv.setText("");
}
private void quizBegin(){
String question = Question.(questions[counter], answers_correct[counter],
answers_wrong[counter],counter); //error here.
//What am I suppose to do??
// How to use an object reference??
// Help please!
question_tv.setText("");
counter++;
}
}
问题类,它封装了一个问题及其正确和错误的答案
public class Question {
private String question;
private String correctAnswer;
private List<String> incorrectAnswers;
private int counter = 0;
public Question(final String question, final String correctAnswer,
final String[] incorrectAnswers, int counter) {
// TODO: empty strings/nulls checks
this.question = question;
this.correctAnswer = correctAnswer;
this.incorrectAnswers = Arrays.asList(incorrectAnswers);
}
public List<String> getPossibleAnswers() {
final List<String> result = new ArrayList<String>();
result.addAll(incorrectAnswers);
result.add(correctAnswer);
Collections.shuffle(result);
return result;
}
public boolean isCorrectAnswer(final String answer) {
if (answer.equals(correctAnswer)) {
return true;
}
return false;
}
public String getQuestion() {
return question;
}
}
公开课问题{
私有字符串问题;
私人字符串更正应答;
私人名单不正确答案;
专用整数计数器=0;
公开问题(最终字符串问题、最终字符串答案、,
最终字符串[]不正确答案,整数计数器){
//TODO:空字符串/空检查
这个问题=问题;
this.correctAnswer=correctAnswer;
this.incorrectAnswers=Arrays.asList(incorrectAnswers);
}
公共列表getPossibleAnswers(){
最终列表结果=新建ArrayList();
结果:addAll(不正确回答);
结果。添加(正确答案);
集合。洗牌(结果);
返回结果;
}
公共布尔值isCorrectAnswer(最终字符串答案){
如果(答案等于(正确答案)){
返回true;
}
返回false;
}
公共字符串getQuestion(){
返回问题;
}
}
我只能猜测您的实际问题,但为什么您要使用字符串数组来表示问题、正确答案和错误答案?为什么不使用Question
对象数组,并让Question
对象管理回答是否正确
编辑
语句<代码>新问题(问题[计数器]、回答正确[计数器]、回答错误[计数器]、计数器)调用问题
类中的构造函数,该构造函数接受给定的参数类型、顺序和数量,以创建对象的实例
Question q = new Question();
创建一个新的Question
对象实例,并将引用分配给变量q
,该变量可用于访问它所引用的Question
类的信息。这是面向对象编程的基本概念
第二次编辑
这一行适用于您:
String[]sl=(String[])q_class.getPossibleAnswers().toArray(新字符串[0])
但是对字符串数组的强制转换((String[])
)是没有意义的。方法toArray(T[])
使用并返回与传递给它的数组类型相同的数组。因此,将新字符串[0]
传递给该方法可以保证返回字符串[]
。因此,您正在将字符串[]
转换为字符串[]
你真的想一开始就这么做吗?为什么不能使用列表
代替数组
如果您在不同类型之间进行大量转换,您应该问问自己是否可以调整代码以在单个类型上操作
(旁注,您可以使用反勾(`)来表示内联代码部分,这有助于使您放在注释中的代码片段更易于提取和阅读)。澄清您想做什么,不要将其用作代码转储。我发现,它看起来像问题q_class=新问题(问题[counter],答案[counter],回答错误[计数器],计数器);String question=q_class.getQuestion();问题(问题);;,是吗?如果这就是你所困惑的,你的问题是非常误导的,那就是(更多的信息添加到我的问题中作为编辑)。啊,谢谢。但是您能告诉我如何将列表转换为数组吗?我完全忘记了。@John,因为看起来你是新来的,我将为你提供一个指向该类API的链接,而不仅仅是给你答案。您可能对它的
toArray
方法感兴趣。@John我的错,我没有注意到您将变量声明为列表
。它不会改变您正在寻找的内容,两者都有适合您需要的toArray
方法。谢谢。这是正确的吗?String[]sl=(String[])q_class.getPossibleAnswers().toArray(新字符串[0]);