Хорошо, поэтому я пытаюсь записать кучу головоломок судоку в файл. Это код, который я должен генерировать головоломки. gen - это класс, который генерирует головоломки, gridArray - массив объектов, который будет содержать головоломки (головоломки генерируются как двумерные массивы int). System.out.print просто печатает сетку, чтобы убедиться, что головоломки верны. У меня проблема указана под блоком кода:
public void run(){
ObjectOutputStream output;
try {
output = new ObjectOutputStream(new FileOutputStream(f));
for(int i = 0; i < amount; i++){
int[][] blahbot = gen.generate(difficulty);
gridArray[i] = blahbot;
System.out.println(" #" + (i + 1) + " ");
for(int row = 0; row < 9; row++){
for(int col = 0; col < 9; col++){
System.out.print(blahbot[row][col]);
if(col == 8){
System.out.println();
}
}
}
}
output.writeObject(gridArray);
output.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
Выходные данные записывают весь массив объектов в файл. У меня проблема в том, что каждый раз, когда я читаю массив из файла, он всегда возвращает одну загадку. У меня есть программа чтения, распечатывающая все содержимое массива, и это та же головоломка, хотя длина массива правильная.
Я заставил эту часть распечатать массивы по мере их сохранения, и они были правильными (без повторов). У меня заканчиваются вещи для тестирования. Я даже пытался использовать разные классы коллекций для сохранения, и я получил тот же результат. Кто-нибудь может увидеть, что не так с моим кодом?
Вот часть моего кода для чтения:
try{
ObjectInputStream input = new ObjectInputStream(new FileInputStream(file));
try{
while (true){
try {
gridArray = (Object[]) input.readObject();
} catch (ClassNotFoundException e) {
}
}
}catch(EOFException e){
}
/*
* Close the input stream
*/
input.close();
} catch(FileNotFoundException e){
} catch (IOException e) {
}
for(Object array: gridArray){
int[][] temp = (int[][])array;
for(int row = 0; row < 9; row++){
for(int col = 0; col < 9; col++){
System.out.print(temp[row][col]);
if(col == 8){
System.out.println();
}
}
}
System.out.println("\n");
}
Где r - Случайный. Он читает массив объектов из файла, а затем выводит каждый объект как int [] [] для распечатки. Печать - это всего лишь тест, чтобы увидеть содержимое массива.