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