2014-04-25 3 views
0

В настоящее время я создаю викторину. После ответа на каждый вопрос я хочу, чтобы у пользователя был 15-секундный перерыв, пока не появится следующий вопрос. Я также хочу, чтобы у пользователя была возможность перейти к следующему вопросу до истечения времени. Если возможно, возможно, в окне может отображаться обратный отсчет с 15. Вот копия кода (который начинается в начале программы и заканчивается после кода для первого вопроса. Я не буду добавлять другие 19 вопросов, так как код для них почти идентичен). Может кто-нибудь, пожалуйста, покажите мне, как они это сделают, поскольку я не знаю, как использовать Java-таймеры. Все мои исследования и попытки выяснить, что делать, на самом деле не помогли.Использование таймера Java в викторине

package quiz; 

import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.util.Scanner; 

import javax.swing.AbstractButton; 
import javax.swing.ImageIcon; 
import javax.swing.JOptionPane; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.Icon; 

import java.util.Timer; 

import java.applet.*; 
import java.net.*; 

public class Main { 

    BufferedImage img = null; 
    BufferedImage img2 = null; 

    Image dbImage; 
    Graphics dbg; 

    private ImageIcon image; 
    private JLabel label; 

    public static void main(String[] args) { 

     int score = 0; 

     int seconds = 0; 

     int loop1 = 0; 
     int loop2 = 0; 
     int loop3 = 0; 
     int loop4 = 0; 
     int loop5 = 0; 
     int loop6 = 0; 
     int loop7 = 0; 
     int loop8 = 0; 
     int loop9 = 0; 
     int loop10 = 0; 
     int loop11 = 0; 
     int loop13 = 0; 
     int loop14 = 0; 
     int loop15 = 0; 
     int loop16 = 0; 
     int loop17 = 0; 
     int loop18 = 0; 
     int loop19 = 0; 
     int loop20 = 0; 
     int loop21 = 0; 
     int loop22 = 0; 

     long begin = 0; 
     long end = 0; 

     long SECbegin = 0; 
     long SECend = 0; 


     String name = JOptionPane.showInputDialog(null, "What is your name? "); 
     while (loop1 < 100) { 
      JOptionPane.showMessageDialog(null, "Hello " + name + ". Welcome to the Game Show. In this quiz, you will be given $1 to start with."); 
      JOptionPane.showMessageDialog(null, "There will be 20 multiple choice questions. \n" + 
        "You will have 30 seconds to answer each question. Answer each question with the letter (A, B, C or D) corresponding with that answer."); 
      JOptionPane.showMessageDialog(null, "If you fail to answer in that time, or if you give an incorrect answer, you will be sent home with $1. \nIf you give a correct answer, your money will double."); 
      JOptionPane.showMessageDialog(null, "If you do not know the answer to a question, you may choose to leave the game show with half of your current prize money. You can do this by typing 'Leave' instead of an answer."); 
      JOptionPane.showMessageDialog(null, "After each question, you will have 15 seconds until the next question is automatically displayed. \nYou may choose to proceed to the next question before this time runs out."); 
      int start = JOptionPane.showConfirmDialog(null, "Would you like to begin? Yes or no?"); 
      if (start == JOptionPane.NO_OPTION) { 
       JOptionPane.showMessageDialog(null, "Ok. Get ready, and when you feel you are ready to begin, click 'Ok'."); 
       loop1++; 
       break; 
      } 
      if (start == JOptionPane.YES_OPTION) { 
       break; 
      } else { 
       System.exit(0); 
       break; 
      } 
     } 
     while (loop2 < 1) { 
      // start timer 
      begin = System.currentTimeMillis(); 
      String Q1 = JOptionPane.showInputDialog(null, "Question 1: What was the original name of the Java programming language? \n A) Coffee B) JCode C) Oak D) Green"); 
      // play Countdown.wav here! 
      if (Q1.equalsIgnoreCase("C")) { 
       // end timer 
       end = System.currentTimeMillis(); 
       JOptionPane.showMessageDialog(null, "Correct!"); 
       if (end - begin < 30000) { 
        score = 2; 
       } else { 
        JOptionPane.showMessageDialog(null, "You took too long to answer the question! YOU ARE OUT OF THE GAME WITH $1!"); 
        System.exit(0); 
       } 
       String L1 = JOptionPane.showInputDialog(null, "You now have $" + score + "! You will automatically proceed to the next question in 15 seconds. \n If you want to proceed to the next question early, type: 'Proceed'."); 
       { 
        if (L1.equalsIgnoreCase("proceed")) { 
         // This is where the user chooses to proceed to the next question! 
         JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!"); 
        } else { 
         // This is where I want the program to wait 15 seconds before automatically displaying the next question! 
         JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!"); 
        } 
        break; 
       } 
      } 
      if (Q1.equalsIgnoreCase("leave")) { 
       score /= 2; 
       JOptionPane.showMessageDialog(null, "You have decided to leave the game show with $" + score + "! Congratulations!"); 
      } else { 
       JOptionPane.showMessageDialog(null, "That is not correct! \n YOU ARE OUT OF THE GAME WITH $1!"); 
       System.exit(0); 
      } 
      loop2++; 
     } 

... Вот то, что я пытался, но Thread.Sleep (1000); line имеет ошибку: «недостижимый код». Если я запустить программу без этой линии, ничего не происходит после 15 секунд:

...

 SECbegin = System.currentTimeMillis(); 
     String L1 = JOptionPane.showInputDialog(null, "You now have $" + score + "! You will automatically proceed to the next question in 15 seconds. \n If you want to proceed to the next question early, type: 'Proceed'."); 
     { 
      while (System.currentTimeMillis() - SECbegin < 15000) { 
       if (L1.equalsIgnoreCase("proceed")) { 
        JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!"); 
        break; // if there is an answer we stop waiting 
        Thread.sleep(1000); // error: unreachable code 
       } else { 
        JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!"); 
       } 
       break; 
      } 
     } 
     if (Q1.equalsIgnoreCase("leave")) { 
      score /= 2; 
      JOptionPane.showMessageDialog(null, "You have decided to leave the game show with $" + score + "! Congratulations!"); 
     } else { 
      JOptionPane.showMessageDialog(null, "That is not correct! \n YOU ARE OUT OF THE GAME WITH $1!"); 
      System.exit(0); 
     } 
     loop2++; 
    } 

Я попытался решить эту проблему, но она не работает :(Ничего не происходит после 15 секунд :

package quiz; 

import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.util.Scanner; 

import javax.swing.AbstractButton; 
import javax.swing.ImageIcon; 
import javax.swing.JOptionPane; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.Icon; 

import java.util.Timer; 

import java.applet.*; 
import java.net.*; 

public class Main { 

BufferedImage img = null; 
BufferedImage img2 = null; 

Image dbImage; 
Graphics dbg; 

private ImageIcon image; 
private JLabel label; 

    public static void main(String[] args) { 

     int score = 0; 

     int seconds = 0; 

     int loop1 = 0; 
     int loop2 = 0; 
     int loop3 = 0; 
     int loop4 = 0; 
     int loop5 = 0; 
     int loop6 = 0; 
     int loop7 = 0; 
     int loop8 = 0; 
     int loop9 = 0; 
     int loop10 = 0; 
     int loop11 = 0; 
     int loop13 = 0; 
     int loop14 = 0; 
     int loop15 = 0; 
     int loop16 = 0; 
     int loop17 = 0; 
     int loop18 = 0; 
     int loop19 = 0; 
     int loop20 = 0; 
     int loop21 = 0; 
     int loop22 = 0; 

     long begin = 0; 
     long end = 0; 

     long SECbegin = 0; 
     long SECend = 0; 


String name = JOptionPane.showInputDialog(null, "What is your name? "); 
while (loop1 < 100){ 
JOptionPane.showMessageDialog(null, "Hello " + name + ". Welcome to the Game Show. In this quiz, you will be given $1 to start with."); 
JOptionPane.showMessageDialog(null, "There will be 20 multiple choice questions. \n" + 
"You will have 30 seconds to answer each question. Answer each question with the letter (A, B, C or D) corresponding with that answer."); 
JOptionPane.showMessageDialog(null, "If you fail to answer in that time, or if you give an incorrect answer, you will be sent home with $1. \nIf you give a correct answer, your money will double."); 
JOptionPane.showMessageDialog(null, "If you do not know the answer to a question, you may choose to leave the game show with half of your current prize money. You can do this by typing 'Leave' instead of an answer."); 
JOptionPane.showMessageDialog(null, "After each question, you will have 15 seconds until the next question is automatically displayed. \nYou may choose to proceed to the next question before this time runs out."); 
int start = JOptionPane.showConfirmDialog(null, "Would you like to begin? Yes or no?"); 
if(start == JOptionPane.NO_OPTION) { 
JOptionPane.showMessageDialog(null, "Ok. Get ready, and when you feel you are ready to begin, click 'Ok'."); 
loop1++; 
break; 
} 
if(start == JOptionPane.YES_OPTION) { 
break; 
} 
else{ 
System.exit(0); 
break; 
} 
} 
while (loop2 < 1){ 
    // start timer 
    begin = System.currentTimeMillis(); 
String Q1 = JOptionPane.showInputDialog(null, "Question 1: What was the original name of the Java programming language? \n A) Coffee B) JCode C) Oak D) Green"); 
// play Countdown.wav here! 
if(Q1.equalsIgnoreCase("C")) { 
    // end timer 
    end = System.currentTimeMillis(); 
JOptionPane.showMessageDialog(null, "Correct!"); 
    if(end - begin < 30000){ 
    score = 2; 
    } 
    else { 
    JOptionPane.showMessageDialog(null, "You took too long to answer the question! YOU ARE OUT OF THE GAME WITH $1!"); 
    System.exit(0); 
    } 
SECbegin = System.currentTimeMillis(); 
String L1 = JOptionPane.showInputDialog(null, "You now have $" + score + "! You will automatically proceed to the next question in 15 seconds. \n If you want to proceed to the next question early, type: 'Proceed'."); 
if(L1.equalsIgnoreCase("proceed")) { 
    JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!"); 
} 
if(System.currentTimeMillis() - SECbegin < 15000){ 
} 
break; 
} 
else{ 
    JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!"); 
} 
if(Q1.equalsIgnoreCase("leave")) { 
    score /= 2; 
    JOptionPane.showMessageDialog(null, "You have decided to leave the game show with $" + score + "! Congratulations!"); 
} 
else{ 
JOptionPane.showMessageDialog(null, "That is not correct! \n YOU ARE OUT OF THE GAME WITH $1!"); 
System.exit(0); 
} 
loop2++; 
    } 

JOptionPane.showMessageDialog(null, "Congratulations " + name + "! You have won the game!"); 
System.exit(0); 
} 
} 

ПОЖАЛУЙСТА ПОМОГИТЕ МНЕ

Теперь вся программа просто глючит и дерьмовый:

package quiz; 

import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.util.Scanner; 

import javax.swing.AbstractButton; 
import javax.swing.ImageIcon; 
import javax.swing.JOptionPane; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.Icon; 

import java.util.Timer; 

import java.applet.*; 
import java.net.*; 

public class Main { 

BufferedImage img = null; 
BufferedImage img2 = null; 

Image dbImage; 
Graphics dbg; 

private ImageIcon image; 
private JLabel label; 

    public static void main(String[] args) { 

     int score = 0; 

     int seconds = 0; 

     int loop1 = 0; 
     int loop2 = 0; 
     int loop3 = 0; 
     int loop4 = 0; 
     int loop5 = 0; 
     int loop6 = 0; 
     int loop7 = 0; 
     int loop8 = 0; 
     int loop9 = 0; 
     int loop10 = 0; 
     int loop11 = 0; 
     int loop13 = 0; 
     int loop14 = 0; 
     int loop15 = 0; 
     int loop16 = 0; 
     int loop17 = 0; 
     int loop18 = 0; 
     int loop19 = 0; 
     int loop20 = 0; 
     int loop21 = 0; 
     int loop22 = 0; 

     int loopw = 0; 

     long begin = 0; 
     long end = 0; 

     long SECbegin = 0; 
     long SECend = 0; 


String name = JOptionPane.showInputDialog(null, "What is your name? "); 
while (loop1 < 100){ 
JOptionPane.showMessageDialog(null, "Hello " + name + ". Welcome to the Game Show. In this quiz, you will be given $1 to start with."); 
JOptionPane.showMessageDialog(null, "There will be 20 multiple choice questions. \n" + 
"You will have 30 seconds to answer each question. Answer each question with the letter (A, B, C or D) corresponding with that answer."); 
JOptionPane.showMessageDialog(null, "If you fail to answer in that time, or if you give an incorrect answer, you will be sent home with $1. \nIf you give a correct answer, your money will double."); 
JOptionPane.showMessageDialog(null, "If you do not know the answer to a question, you may choose to leave the game show with half of your current prize money. You can do this by typing 'Leave' instead of an answer."); 
JOptionPane.showMessageDialog(null, "After each question, you will have 15 seconds until the next question is automatically displayed. \nYou may choose to proceed to the next question before this time runs out."); 
int start = JOptionPane.showConfirmDialog(null, "Would you like to begin? Yes or no?"); 
if(start == JOptionPane.NO_OPTION) { 
JOptionPane.showMessageDialog(null, "Ok. Get ready, and when you feel you are ready to begin, click 'Ok'."); 
loop1++; 
break; 
} 
if(start == JOptionPane.YES_OPTION) { 
break; 
} 
else{ 
System.exit(0); 
break; 
} 
} 
while (loop2 < 1){ 
    // start timer 
    begin = System.currentTimeMillis(); 
String Q1 = JOptionPane.showInputDialog(null, "Question 1: What was the original name of the Java programming language? \n A) Coffee B) JCode C) Oak D) Green"); 
// play Countdown.wav here! 
if(Q1.equalsIgnoreCase("C")) { 
    // end timer 
    end = System.currentTimeMillis(); 
JOptionPane.showMessageDialog(null, "Correct!"); 
    if(end - begin < 30000){ 
    score = 2; 
    } 
    else { 
    JOptionPane.showMessageDialog(null, "You took too long to answer the question! YOU ARE OUT OF THE GAME WITH $1!"); 
    System.exit(0); 
    } 

// start  
SECbegin = System.currentTimeMillis(); 
String L1 = JOptionPane.showInputDialog(null, "You now have $" + score + "! You will automatically proceed to the next question in 15 seconds. \n If you want to proceed to the next question early, type: 'Proceed'."); 
while(loopw < 10000){ 
if(L1.equalsIgnoreCase("proceed")) { 
    JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!"); 
    break; 
} 
if(System.currentTimeMillis() - SECbegin > 15000){ 
    JOptionPane.showMessageDialog(null, "You may now proceed to the next question. Good luck!"); 
} 
else{ 
} 
loopw++; 
} 

// end 

if(Q1.equalsIgnoreCase("leave")) { 
    score /= 2; 
    JOptionPane.showMessageDialog(null, "You have decided to leave the game show with $" + score + "! Congratulations!"); 
} 


else{ 
JOptionPane.showMessageDialog(null, "That is not correct! \n YOU ARE OUT OF THE GAME WITH $1!"); 
System.exit(0); 
} 
loop2++; 
    } 


JOptionPane.showMessageDialog(null, "Congratulations " + name + "! You have won the game!"); 
System.exit(0); 
} 
}} 
+0

Вы заявили, что хотите, но на самом деле вы не задали конкретный вопрос. Если вы попытались это сделать, каковы были результаты по сравнению с тем, что вы ожидали? – csmckelvey

+0

Я провел много часов исследований и пытался выяснить, какой таймер использовать, и как использовать его в моей викторине. Мне просто нужен кто-то, чтобы показать мне, как это сделать. – JavaPr0grammer

+0

FYI: Любой код после заявления о перерыве никогда не может быть достигнут. Это точка разрыва. – csmckelvey

ответ

0

EDIT
Поместите его в метод, чтобы вы могли использовать его каждый вопрос без копирования и вставки.

Мне нужно было бы с Thread.sleep(ms);. Я думаю, что это решит вашу проблему, и я подготовил некоторый непроверенный код для демонстрации.

Прежде чем я покажу вам это, я хочу дать вам некоторое представление о том, что на самом деле делает метод сна. OK, метод sleep приостанавливает текущий поток для заданной миллисекундной суммы, в данном случае 15 секунд или 15000 миллисекунд (1 секунда = 1000 миллисекунд). Теперь, для кода, вы можете сделать это:

public static boolean interrupted; 
    public void wait() 
    { 
    interrupted = false; 
    //this is just the boolean value allowing the countdown to be interrupted as you requested. 
    Integer currentTime = 15; 
    //set the integer value of the countdown time. 
    while(currentTime > 0 || interrupted){ 
    //must throw InterruptedException here. 
    Thread.sleep(1000); 
    currentTime--; 
    //'timerText' is just the graphics object displaying the current countdown state. 
    timerText.setText(currentTime.toString); 

    } 
    currentTime = 15; 
    interrupted = false; 
    //resetting the values 
    } 

прерванного значения, просто установите, что, когда метод ввода для отмены обратного отсчета активируется.

Пожалуйста, помните, что этот код не работает, и это просто ссылочный фрагмент.

Надеюсь, это поможет.

+0

Спасибо.Должен ли я иметь этот код в каждом из моих 20 вопросов, плюс каждый из периодов ожидания между вопросами, или это одноразовый кусок, если код в начале будет работать для каждого вопроса? Можете ли вы использовать третий пример кода из моего вопроса, чтобы показать мне? – JavaPr0grammer

+0

Подождите, я отредактирую его, и, возможно, это будет иметь больше смысла. – user3200756

0
import javax.swing.*; 
import java.io.*; 

public class quizbee 
{ 

    static LineNumberReader cin = new LineNumberReader(new InputStreamReader(System.in)); 


    public static void main(String[] args) 
    { 
      int score = 0; 
      final int NumberofQuestions = 10; 

     System.out.println("Quiz Bee\n\n"); 


      String[][] QandA = { 
           {"Instance of a class.  A. Syntax B. Compiler C. Object     Your answer:","c"}, 
           {"A group or collection of objects with common properties.     A. Class B. Attributes C. Variables Your answer:","a"}, 
           {"It occur when you use a correct word in the wrong context in program code. A. Syntax Error B. Semantic Error C. Program Error Your answer:","b"}, 
           {"A characteristic that define an object as part of a class.    A. Attributes B. Boolean C. Compiler Your answer:","a"}, 
           {"A style in of programming in which sets of operations are executed one after in secuence A. Programming B. Procedure C. Procedural Programming   Your answer:","c"}, 
           {"Named computer memory locations that hold vakues that may vary.    A. Class B. Variables C. Compiler Your answer:","b"}, 
           {"A statement or programs means to carry it out.    A. executing B. Variables C. Compiler Your answer:","a"}, 
           {"An error that occurs when you introduce typing errors into your program.    A. Syntax Error B. Semantic Error C. Program Error Your answer:","a"}, 
           {"It refers to the hiding of data and method within an object.    A. Inheritance B. Polymorphism C. Encapsulation Your answer:","c"}, 
           {"It refers to the rule of language.       A. Syntax B. Software C. Program Your answer:","a"} }; 


     String[] Answers = new String[NumberofQuestions]; 


     for(int x = 0; x < NumberofQuestions; x++) 
     { 
      System.out.print((x+1) + ". " + QandA[x][0] + " "); 

      try { Answers[x] = cin.readLine(); } 
      catch (IOException e) { System.err.println("Error."); } 

      Answers[x].toLowerCase(); 

      if(QandA[x][1].equals(Answers[x])) 
      { 
        score++; 
      } 

      System.out.print("\n"); 

     }       

     System.out.println("\n\t\tYou got " + score + " of " 
          + NumberofQuestions + " right!\n\n\n"); 

     System.exit(0); 


    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^