2016-09-24 175 views
0

我在寫一個測驗應用程序,當您回答正確的問題並且分數增加時,您會得到分數,我必須使用if語句。請任何人知道如何在if語句中使用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); 
     } 
     }); 
} 
}); 
+1

請多花一點時間和精力來解釋您的問題,因爲由於您提供的信息很少,所以這是相當混亂的。 –

+0

爲什麼再次下臺?......關於這個問題還不清楚嗎? –

+0

我不能肯定地說,但你還沒有發佈[mcve],還沒有澄清你是否在一個位上。 –

回答

2

我可以在提供的代碼想唯一的問題是,你正在測試如果一個JTextField的文本包含在你的GUI代碼造物的特定字符串,「東京」。這是在GUI創建時以及在用戶有機會輸入數據之前運行的代碼。爲了解決這個問題,if測試應該在一些監聽器中,也許是JButton的ActionListener。否則,我不知道你是否在if內意味着什麼。


編輯

關於你的新的信息:

我寫一個測驗的應用程序,因爲你回答正確的問題和你的分數增加你在哪裏得到的痕跡,而我使用if語句。

您需要完全重新設計你的代碼你很難在GUI中編碼的代碼邏輯,使一個非常剛性,巨大,並難以提高程序(如你發現了),因爲代碼邏輯必須隨着程序狀態的改變而改變。但是你應該從GUI中分離出你的程序邏輯,「模型」,「視圖」,並嘗試創建它們並獨立地測試它們,類似於(或等於)「Model-View-控制器「或」MVC「程序設計。從模型開始,程序的「膽量」,並創建您的非GUI問題類,其中一個帶有實例字段,方法和任何其他支持類。一旦經過測試和調試,然後嘗試創建可使用此模型並顯示其狀態的GUI或視圖類。您可能還想創建一個帶有偵聽器的「Controller」類,以幫助將視圖連接到模型。

例如,如果你的測驗是做一個選擇題類型的程序,然後再考慮:

包含字符串問題,可能的答案字符串和正確答案字符串
  • 一個問題類。
  • 給它一個public boolean test(String testString),如果將正確答案String傳遞給它,則返回true。
  • 允許Question類將可能的答案字符串的順序隨機化,該字符串可能在ArrayList中保存。
  • 然後創建一個包含問題ArrayList的Quiz類。

然後創建一個GUI來顯示這些。

  • 我通常創建的GUI適合於創建JPanel,而不是JFrames以提高靈活性,然後在需要時創建JFrame。
  • 創建一個顯示問題字符串和隨機可能答案字符串的QuestionPanel。
  • 使用ButtonGroup將可能的答案顯示爲JRadioButton,以將選擇限制爲一個。
  • 等....

您還需要一個類從每題一個文本文件中讀取數據,並將該數據加載到測驗類。

你還需要一個評分機制。

+0

理解!! .....我已經完成了......我只是不想顯示很多代碼.....但是然後....我需要一些更多的分數增量語法! –

+1

@ Presh_K7:然後澄清你的問題,花時間制定一個明確的具體問題,將基本代碼燒寫到[mcve]。爲了幫助改進上述問題,請查看[Jon Skeet的StackOverflow問題清單](http://codeblog.jonskeet.uk/2012/11/24/stack-overflow-question-checklist/)。這是他在[寫完美的問題]上精彩的長篇文章的縮寫版本(http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)。 –

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++; 
      } 
     } 
. 
.