Salve a tutti, ogni volta che vado a leggere dati salvati con RandomAccessFile, mi da quasi tutti valori salvati, quindi molto probabilmente faccio qualche errore di scrittura/lettura, ma non riesco a capire dove... se qualcuno gentilmente potrebbe provare ad individuare il problema, può guardare questo codice:
codice:package PacmanDFClass; import java.io.RandomAccessFile; import java.io.File; import java.util.Formatter; import java.util.Scanner; import java.awt.Graphics; import java.awt.Color; import java.awt.Font; import javax.swing.JOptionPane; public class PacRecord { private Record[] record = new Record [10]; private final int SIZE = 44; public PacRecord() { for (int i = 0; i < 10; i++) { record[i] = new Record ("_", 0, 0); } File file = new File ("PacRecord.dat"); if (!file.exists()) { RandomAccessFile init = null; try { init = new RandomAccessFile (file, "rw"); for (int i = 0; i < 10; i++) { writeName (init, null); init.writeInt (0); init.writeInt (0); } } catch (java.io.IOException exception) {} } } private void writeName (RandomAccessFile file, String string) { StringBuffer buffer = null; if (string != null) buffer = new StringBuffer (string); else buffer = new StringBuffer (16); buffer.setLength (16); try { file.writeChars (buffer.toString()); } catch (java.io.IOException exception) {} } private void read() throws java.io.IOException { RandomAccessFile input = null; try { input = new RandomAccessFile ("PacRecord.dat", "r"); } catch (java.io.IOException exception) {} int n = 0; while (n < 10) { record[n].name = readName (input); record[n].level = input.readInt(); record[n].level = input.readInt(); n++; } try { input.close(); } catch (java.io.IOException exception) {} Ordin(); } private String readName (RandomAccessFile file) throws java.io.IOException { char[] name = new char[16]; for (int i = 0; i < name.length; i++) name[i] = file.readChar(); return new String (name).replace ('\0', ' '); } private void write() throws java.io.IOException { RandomAccessFile output = null; try { output = new RandomAccessFile ("PacRecord.dat", "rw"); } catch (java.io.IOException exception) {} for (int i = 0; i < 10; i++) { output.seek (i * SIZE); writeName (output, record[i].name); output.writeInt (record[i].level); output.writeInt (record[i].score); } try { output.close(); } catch (java.io.IOException exception) {} } private void Ordin() { Record r = new Record ("", 0, 0); for (int i = 0; i < 9; i++) for (int j = i + 1; j < 10; j++) { if (record[j].score > record[i].score) { r = record[i]; record[i] = record[j]; record[j] = r; } } } public void endGame (int level, int score) { File file = new File ("PacRecord.dat"); if (file.exists()) { String name = null; for (int i = 0; i < 10; i++) if (score > record[i].score) { name = JOptionPane.showInputDialog (null, "Complimenti, nuovo record!\nInserisci il tuo nome:", "Nuovo record!", JOptionPane.PLAIN_MESSAGE); record[9].name = name.replace (' ', '_'); record[9].level = level; record[9].score = score; break; } if (name != null) { Ordin(); try { write(); } catch (java.io.IOException exception) {} } } } } class Record { String name; int level; int score; Record (String name, int level, int score) { this.name = name; this.level = level; this.score = score; } }

Rispondi quotando