Results 1 to 5 of 5
  1. #1
    saytri is offline Member
    Join Date
    Dec 2007
    Posts
    34
    Rep Power
    0

    Default textfile with Java problems

    I am making a quiz, and i wrote the questions in a textfile. But i wish that the questions when they are called from Java come up randomly, not always in the same state. What can i do? Thanks a lot for the help. :)

  2. #2
    tim's Avatar
    tim
    tim is offline Senior Member
    Join Date
    Dec 2007
    Posts
    435
    Rep Power
    7

    Default Using Math.random() and text files.

    Hi!. Here's a method that will read a text file:
    Java Code:
    public static Vector<String> loadFile(String filename){
        Vector<String> strings = new Vector<String>();
        try{
            FileReader file = new FileReader(filename);
            BufferedReader buffer = new BufferedReader(file);
            while (true)
            {
                String line = buffer.readLine();
                if (line == null)
                    break;
                else {
                    strings.add(line); 
                }
            }
            buffer.close();
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
        return strings;
    }
    Using this method and Math.random(), you can access random lines in your text file. Lets assume that each question is on a separate line in the text file. Your main() method could look like this.
    Java Code:
    public static void main(String[] arguments){
        Vector<String> data = loadFile("questions.txt");
        int pos = (int)((double)data.size() * Math.random());
        System.out.println("Next question: " + data.get(pos));
    }
    Remember to add the imports:
    Java Code:
    import java.io.*;
    import java.util.*;
    My code has been checked by hand, so just scream if there is a problem. ;)
    Eyes dwelling into the past are blind to what lies in the future. Step carefully.

  3. #3
    saytri is offline Member
    Join Date
    Dec 2007
    Posts
    34
    Rep Power
    0

    Default

    Thanks a lot for your help. :-) But i have already written the piece of code where i read the file, and since its a bit differnet from yours, i got a bit confused oh how to implement the Math.random() into my piece of code. Can you pls help me do the method Math.random into my piece of code, because i got confused. Thanks a lot. I appreciate a lot your help. :-)

    This is the code i have written:

    Java Code:
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import java.io.*;
    import javax.swing.*;
     
    public class GQ extends JFrame implements ActionListener {
        private static final int FRAME_WIDTH = 140;
        private static final int FRAME_HEIGHT = 160;
        private static final int FRAME_X_ORIGIN = 70;
        private static final int FRAME_Y_ORIGIN = 50;
        AnswerStore answerStore = new AnswerStore();
     
        
        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);
           
        }
     
        public GQ() {
            Container contentPane;
            JButton button1, button2, button3, button4, button5;
     
            setSize (FRAME_WIDTH, FRAME_HEIGHT);
            setTitle("Geography Quiz");
            setLocation(FRAME_X_ORIGIN, FRAME_Y_ORIGIN);
     
            contentPane = getContentPane();
            contentPane.setBackground(Color.pink);
            contentPane.setLayout(new FlowLayout());
     
            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 void actionPerformed(ActionEvent e) {
            String ac = e.getActionCommand();
            String[] questions = null;
            String[] answers = null;
            if (ac.equals("b1")) {
                questions = readFile("plate_tectonics.txt");
              
                answers = answerStore.tectonicAnswers;
                 
            } else if(ac.equals("b2")) {
                questions = readFile("rivers.txt");
                answers = answerStore.riverAnswers;
            } else if(ac.equals("b3")) {
                questions = readFile("rocks.txt");
                answers = answerStore.rockAnswers;
            } else if (ac.equals("b4")) {
                System.exit(0);
            }
            askQuestions(questions, answers);
        }
           
        
        
        
     
        private String[] readFile(String path) {
            Scanner s = null;
            StringBuilder sb = new StringBuilder();
            String separator = "\n";
            try {
                s = new Scanner(new BufferedReader(new FileReader(path)));
    //            s.useDelimiter(",\\s*");
                while (s.hasNext()) {
                    sb.append(s.nextLine() + separator);
    //                JOptionPane.showMessageDialog(null,s.next());
                }
            } catch(IOException e) {
                System.out.println("read error: " + e.getMessage());
            } finally {
                if (s != null) 
                    s.close();
    //            break;
            }
            
            System.out.println("sb = " + sb.toString());
            System.out.printf("sb.split = &#37;s%n", Arrays.toString(sb.toString().split("\\n")));
            return sb.toString().split("\\n");
        }
     
        private void askQuestions(String[] questions, String[] answers) {
            
            System.out.printf("questions = %s%nanswers = %s%n",
                               Arrays.toString(questions),
                               Arrays.toString(answers));
            int count = 0;
            int point = 0;
            for(int j = 0; j < questions.length; j++) {
                String input = JOptionPane.showInputDialog(null, questions[j]);
                if(answers[j].equals(input))
                  { 
                    count++;
                    point++;
                }   
                }
                JOptionPane.showMessageDialog(null, "You answered " + count +
                                          " out of " + questions.length +
                                          " questions correctly.");
                JOptionPane.showMessageDialog(null, "Your Geography Quiz score is " + ((point*100)/10) + " % ");
            
              if(point>=0 && point<=3)
              {
                 
                  JOptionPane.showMessageDialog(null, "You need to Improve");
               }
               
               
             if(point>=4 && point<=7)
              {
                 
                  JOptionPane.showMessageDialog(null, "Good");
               }
               
               if(point>=8 && point<=10)
              {
                 
                  JOptionPane.showMessageDialog(null, "You did Great");
               }
                                        
          }
        }
     
    class AnswerStore  {
        String[] tectonicAnswers = {
            "Hellenic", "destructive", "100km", "Italy", "Wegner",
            "Mariana", "Sicily", "created", "constructive", "Mediterranean"
        };
        
        String[] riverAnswers = {
            "Gorges", "Meanders", "Levees", "Yes", "Less Economic Developed Countries",
            "crescent shaped lakes", "More Economic Developed Countries", "No", "River Discharge", "No"
        };
        
        String[] rockAnswers = {
            "40km", "Igneous Rock", "Sedimentary", "Basalt", "Organic",
            "pressure", "Oolites", "Igneous", "dark black", "basalt"
        };
    
     
    
    }
    Thanks again :)

  4. #4
    tim's Avatar
    tim
    tim is offline Senior Member
    Join Date
    Dec 2007
    Posts
    435
    Rep Power
    7

    Default Okay

    Let's create a mix method:
    Java Code:
        public static String[] mix(String[] array){
            Vector<String> data = new Vector<String>();
            String[] result = new String[array.length];
            for (String string : array)
                data.add(string);
            int count = 0;
            while (data.size() > 0){
                int pos = (int)(Math.random() * (double)data.size());
                String next = data.get(pos);
                result[count++] = next;
                data.remove(pos);
            }
            return result;
        }
    Use this method to mix the array before you use it:
    Java Code:
    questions = mix(questions);
    Eyes dwelling into the past are blind to what lies in the future. Step carefully.

  5. #5
    saytri is offline Member
    Join Date
    Dec 2007
    Posts
    34
    Rep Power
    0

Similar Threads

  1. ECG plot in a textfile
    By samson in forum Java 2D
    Replies: 13
    Last Post: 01-28-2012, 04:02 PM
  2. Search TextFile
    By gsupriyarao@yahoo.com in forum Advanced Java
    Replies: 5
    Last Post: 04-11-2008, 11:03 AM
  3. reading textfile from java problem
    By saytri in forum New To Java
    Replies: 1
    Last Post: 01-17-2008, 02:13 AM
  4. Textfile and GUI problems
    By saytri in forum New To Java
    Replies: 2
    Last Post: 12-21-2007, 04:08 PM
  5. Problem with storing and retrieving from a textfile
    By Albert in forum Advanced Java
    Replies: 1
    Last Post: 07-13-2007, 03:01 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •