I am doing a quiz where the user can choose from 3 different quizzez. My tutor told me to use binary files to store the questions. I have succesful done this. The answers are stored in an array. My problem is with a for loop that i have done, to check whether the answers entered by the user are correct or not. But the program isn't doing anything inside the for loop. Can someone pls help me. Thanks a lot. Source code examples are really helpful to me.
This is the code:
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionListener.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import java.util.Calendar;
import java.awt.image.*;
import javax.imageio.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class GQ extends JFrame implements ActionListener {
private static final int FRAME_WIDTH = 1024;
private static final int FRAME_HEIGHT = 768;
private static final int FRAME_X_ORIGIN = 0;
private static final int FRAME_Y_ORIGIN = 0;
AnswerStore answerStore = new AnswerStore();
boolean timeForMore;
public GQ() {
Container contentPane;
contentPane = getContentPane();
JButton button1, button2, button3, button4, button5;
setSize (FRAME_WIDTH, FRAME_HEIGHT);
setTitle("Geography Quiz");
setLocation(FRAME_X_ORIGIN, FRAME_Y_ORIGIN);
button1 = new JButton("Plate Tectonics");
button2 = new JButton("Rivers");
button3 = new JButton("Rocks");
button4 = new JButton("Quit");
contentPane.add(button1);
contentPane.add(button2);
contentPane.add(button3);
contentPane.add(button4);
button1.addActionListener(this);
button1.setActionCommand("b1");
button2.addActionListener(this);
button2.setActionCommand("b2");
button3.addActionListener(this);
button3.setActionCommand("b3");
button4.addActionListener(this);
button4.setActionCommand("b4");
setDefaultCloseOperation(EXIT_ON_CLOSE);
public static void main (String[] args) {
JOptionPane.showMessageDialog(null, "This is a Geography Quiz");
JOptionPane.showMessageDialog(null, "Good Luck");
GQ frame = new GQ();
frame.setVisible(true);
new GQ();
GQ File = new GQ();
}
String ac = event.getActionCommand();
String[] question = null;
String[] answers = null;
if(ac.equals("b2")) {
final JPF1 appRef = new JPF1();
JFrame frame = new JFrame("CountDown");
MP panel = new MP();
panel.addCountDownListener(appRef);
panel.setVisible(true);
frame.setSize(panel.getSize());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.setVisible(true);
question = readFile("rivers.dat");
answers = answerStore.riverAnswers;
} else if (ac.equals("b4")) {
System.exit(0);
}
askQuestions(question, answers); // calls the questions from textfile
}
public void stopAndShowResults() {
timeForMore = false; // used for countdown.
}
public String[] readFile(String path) {
StringBuilder sb = new StringBuilder();
String separator = "\n";
String question;
try{
File aFile = new File( "rivers.dat" );
// create an output stream to the file
FileInputStream aFileInStream = new FileInputStream ( aFile );
// create a data output stream to the file output stream
DataInputStream aDataInStream = new DataInputStream ( aFileInStream );
// read data from file
question = aDataInStream.readUTF();
aFileInStream.close();
JOptionPane.showInputDialog(null,question);
}
catch( FileNotFoundException e )
{
System.out.println( e.getMessage() );
System.exit(1);
}
catch(IOException e)
{
System.out.println( e.getMessage() );
System.exit(1);
}
return sb.toString().split("\\n");
}
public void askQuestions(String[] question, String[] answers) {
int count = 0;
int point = 0;
for(int j = 0; j < question.length; j++) { this for loop isn't working
timeForMore = true;
String input = JOptionPane.showInputDialog(null,question[j]);// shows questions in a dialog box together with input line
JOptionPane.showInputDialog(null,question);
if(answers[j].equals(input))
{
count++; // incrementing counter if entered answer is correct
point++;
}
if(!timeForMore) // if time is over, the program executes the loop an stops asking questions.
break;
}
JOptionPane.showMessageDialog(null, "You answered " + count +
" out of " + question.length +
" questions correctly.");
int percent = (count*100)/question.length;
JOptionPane.showMessageDialog(null, "Your Geography Quiz score is " + percent + " % ");
class AnswerStore { // storing answers of each quiz in arrays
String[] riverAnswers = {
"Gorges", "Meanders", "Levees", "Yes", "Less Economic Developed Countries",
"crescent shaped lakes", "More Economic Developed Countries", "No", "River Discharge", "No", "",
"", ""
};
}
}