我的任务是使用JFrames构建调查问卷。我创建了一个类,可以将问号作为参数,并返回问题,答案和指定问题的正确答案。
以下是我的代码的基本概念
int qNum = 1;
QnA questions = new QnA(qNum);
JFrame frame = new JFrame;
JLabel q = new JLabel(QnA.question)//where the .question returns the question determined by qNum.
JRadioButton ans1 = new JRadioButton(QnA.Answers[0])//.Answers[] is the array in which the answers are stored.
JRadioButton ans2 = new JRadioButton(QnA.Answers[1])
//etc
JButton sub = new JButton("Submit");
Jbutton rst = new JButton("Clear");
然后我创建了一个事件处理程序,如果答案正确,它将增加qNum的值。
if(qNum >0 && qNum<20){
qNum ++;
frame.revalidate();
} else {
JOptionPane.showMessageDialog(this,"You have the completed the quiz!");
qNum = 1;
}
我正在尝试更新通过参数传递的问题编号(qNum)。我知道java通过值而不是引用来获取结果,所以我稍后在代码中更新值实际上并没有更新。我想知道是否有办法实际上可以做到这一点?
谢谢!
答案 0 :(得分:0)
让我做一个免责声明,说我认为你试图解决的问题有更好的设计,最终,改善它会更好。
关于你的问题,基本上你需要做的是创建一个代表计数器的类:
class QuestionsAnswered {
private int count = 0;
void increment() {
count++;
}
int currentCount() {
return count;
}
boolean hasAllQuestionsAnswered() {
return count > 0 && count < 20;
}
}
QuestionsAnswered questionsAnswered = new QuestionsAnswered();
QnA questions = new QnA(questionsAnswered);
if (questionsAnswered.hasAllQuestionsAnswered()) {
questionsAnswered.increment();
frame.revalidate();
}
请注意,一些相关的逻辑,例如问题比较的数量,在我看来应该包含在该类中。
答案 1 :(得分:0)
您可以创建一个类来保存该值,然后更新它。
class SimpleClass{
int qNum = 1;
}
SimpleClass qClass = new SimpleClass();
然后只需传入对象并更新qNum属性。 (仅供参考,如果您在传递qClass的方法中执行qClass = new SimpleClass();
之类的操作,它将创建一个新对象,并且您将丢失对该对象的引用。)