2016-05-12 65 views
0

我的任务是使用JFrame构建调查问卷。我创建了一个可以将问题编号作为参数的类,并返回指定问题的问题,答案和正确答案。更新通过班级参数传递的值

下面是我的代码是什么样的

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(); 
} 

注意,一些相关的逻辑这样的问题比较的数量,在我看来应该包含在该类内。

+0

不幸的是,即使我通过这个,它不起作用:/。我知道可能有更好的方法来做到这一点。不幸的是,因为它几乎是最后期限,我不能拿出任何新的Java学生... – naturesenshi

+0

这是不是特别的工作? –

0

您可以创建一个类来保存该值,然后进行更新。

class SimpleClass{ 
    int qNum = 1; 
} 

SimpleClass qClass = new SimpleClass(); 

然后只是传递对象并更新qNum属性。 (仅供参考,如果您在传递qClass的方法内执行类似qClass = new SimpleClass();的操作,它将创建一个新对象,并且您将失去对该对象的引用)。

+0

哇谢谢你!感谢你所说的关于在另一种方法中创建qClass的内容,我能够弄明白! – naturesenshi