在另一个if语句中使用if语句的结果

时间:2016-09-24 17:35:27

标签: java if-statement int jbutton actionlistener

我正在编写一个测验应用程序,当你回答正确的问题并且你的分数增加时你得到分数,我必须使用if语句。任何人都知道如何在另一个if语句中使用if语句中的值!我有点困惑,它在这里工作......我感谢你的帮助!...这里有一个小代码示例;

     int x = 3;
        String xy = Integer.toString(x);
        int y = 0;
        String yy = Integer.toString(y);

        JButton one = new JButton ("Quest 1");
        one.addActionListener (new ActionListener (){
           public void actionPerformed(ActionEvent p) {
        JFrame ex = new JFrame ();
        ex.setTitle("Question 1);
        ex.setSize(400, 400);
        ex.setLayout(new FlowLayout());
        ex.setBackground(Color.WHITE);

        JLabel ey = new JLabel ("What is the capital of Japan?);
        Font tan = new Font ("Script MT Bold", Font.BOLD, 18);
        ey.setFont(tan);
        ey.setForeground(Color.BLACK);
        ex.add(ey, BorderLayout.NORTH);

        JButton answ = new JButton("submit");

        JTextField g = new JTextField (10);
        g.setFont(tan);

        String ans = "Tokyo";

        String merit = "Correct";
        String flop = "wrong";
        String mer = merit + ans;
        String flip = flop + ans;
    answ.addActionListener(new ActionListener(){
 public void actionPerformed (ActionEvent p) {

        if (g.getText.equals("Tokyo") {
          JOptionPane.showMessageDialog(null, mer);
            one.setText(xy);
        }
        else {
        JOptionPane.showMessageDialog(null,flip);
         one.setText(yy);
        }

        //In my next Action Listener, I would love to 
        //pick the score from the previous listener....and add to the next score....
        //So that we have something like ....
        //x(updated from previous listener) + x
          ex.add(g, BorderLayout.SOUTH);
        }
        });
}
});

2 个答案:

答案 0 :(得分:2)

我在所提供的代码中可以猜到的唯一问题是,如果JTextField的文本包含特定的字符串,则需要进行测试,"东京"在您的GUI创建代码中。这是在GUI创建时以及在用户有机会输入数据之前运行的代码。要解决这个问题,if测试应该在一些监听器中,也许是JButton的ActionListener。否则,如果在if。

中,我不知道你的意思

修改

关于您的新信息:

  

我正在写一个测验应用程序,当你回答正确的问题并且你的分数增加时你得到分数,我必须使用if语句。

您需要完全重新设计代码,因为您需要在GUI中对代码逻辑进行硬编码,从而导致非常严格的巨大,并且难以增强程序(因为您和#39;重新发现)因为代码逻辑必须随着程序状态的变化而改变。

相反,你应该拆分你的程序逻辑,"模型"从GUI," view",并尝试创建它们并独立测试它们,类似于(或等于)"模型 - 视图 - 控制器"或者" MVC"程序设计。从模型开始,"胆量"程序和创建非GUI问题类,一个包含实例字段,方法和任何其他支持类。一旦对其进行了测试和调试,然后尝试创建可以使用此模型并显示其状态的GUI或视图类。您可能还想创建一个" Controller"具有帮助将视图连接到模型的侦听器的类。

例如,如果您的测验是多项选择类型的程序,请考虑:

  • 包含问题字符串的问题类,可能的答案字符串和正确答案字符串。
  • 给它一个public boolean test(String testString),如果正确的答案字符串被传递给它,则返回true。
  • 允许Question类随机化可能的答案字符串的顺序,可能在ArrayList中保存。
  • 然后创建一个包含问题ArrayList的测验类。

然后创建一个GUI来显示这些。

  • 我通常会创建适合创建JPanel的GUI,而不是JFrame,以提高灵活性,然后在需要时创建JFrame。
  • 创建一个问题面板,显示问题字符串和随机可能的答案字符串。
  • 将可能的答案显示为带有ButtonGroup的JRadioButtons,以将选择限制为一个。
  • 等...

您还希望班级从每个问题的文本文件数据中读取数据,并将该数据加载到Quiz类中。

您还需要一种评分机制。

答案 1 :(得分:2)

请将所有必需变量作为类级别变量,而不是在actionlistner方法中声明它。类级变量将在所有方法中可见,因此不需要传递它们。将分数变量声明为类级别。

    public class ClassTest {
        int score=0;

        public void acgionlistner1(Event ev)
        {
            if(ans.equals(userinput))
            {
                score++;
            }
        }
        public void acgionlistner2(Event ev)
        {
            if(ans.equals(userinput))
            {
                score++;
            }
        }
.
.