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;
}
}