Results 1 to 5 of 5
Thread: textfile with Java problems
- 12-29-2007, 09:33 AM #1
Member
- Join Date
- Dec 2007
- Posts
- 34
- Rep Power
- 0
- 12-29-2007, 09:46 AM #2
Using Math.random() and text files.
Hi!. Here's a method that will read a text file:
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 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; }
Remember to add the imports: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)); }
My code has been checked by hand, so just scream if there is a problem. ;)Java Code:import java.io.*; import java.util.*;
Eyes dwelling into the past are blind to what lies in the future. Step carefully.
- 12-29-2007, 10:00 AM #3
Member
- Join Date
- Dec 2007
- Posts
- 34
- Rep Power
- 0
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:
Thanks again :)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 = %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" }; }
- 12-29-2007, 10:34 AM #4
Okay
Let's create a mix method:
Use this method to mix the array before you use it: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; }
Java Code:questions = mix(questions);
Eyes dwelling into the past are blind to what lies in the future. Step carefully.
- 12-29-2007, 05:16 PM #5
Member
- Join Date
- Dec 2007
- Posts
- 34
- Rep Power
- 0
Similar Threads
-
ECG plot in a textfile
By samson in forum Java 2DReplies: 13Last Post: 01-28-2012, 04:02 PM -
Search TextFile
By gsupriyarao@yahoo.com in forum Advanced JavaReplies: 5Last Post: 04-11-2008, 11:03 AM -
reading textfile from java problem
By saytri in forum New To JavaReplies: 1Last Post: 01-17-2008, 02:13 AM -
Textfile and GUI problems
By saytri in forum New To JavaReplies: 2Last Post: 12-21-2007, 04:08 PM -
Problem with storing and retrieving from a textfile
By Albert in forum Advanced JavaReplies: 1Last Post: 07-13-2007, 03:01 PM


LinkBack URL
About LinkBacks
Reply With Quote
Bookmarks