0

每当我想打印我得到的文件时,我在读取字节时遇到了一些readInt()问题。当我想显示更新的数字系列时,最后一个 catch 语句中出现了相同的错误。这是我的代码:RandomAccessFileEOFException

import java.io.*;
import java.util.Scanner;
public class CentNumbers {
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(System.in);
int num;
RandomAccessFile numbers = new RandomAccessFile("Numbers.dat", "rw");

System.out.println("Saved numbers are:");
numbers.setLength(0);

for (int i = 0; i < 100; i++){
  num=(int)(Math.random()*100);
  numbers.writeInt(num);
  System.out.print(numbers.readInt()+" ");
  }
try{
do{
System.out.print("\nadd another number? (y/n):");

String x= input.next();

if (!x.equals("y")) throw new Exception("Comeback Soon");


    System.out.print("Write number :");
    int b=input.nextInt();
    numbers.seek(numbers.length());
    numbers.writeInt(b);

 } while(true);

}//end try


catch ( Exception e){

    System.out.println("Saved numbers are:");

    for (int i=0; i<numbers.length();i++){
        numbers.seek(i*4);
        System.out.print(numbers.readInt()+" ");

    }//end for
    System.out.println();
    System.out.println(e.getMessage() );
    numbers.close();

    }//end catch

 }
}
4

1 回答 1

1

在此循环中,您尝试从文件末尾读取(您readInt()在 之后writeInt(),而不重置位置)。

for (int i = 0; i < 100; i++){
  num=(int)(Math.random()*100);
  numbers.writeInt(num);
  System.out.print(numbers.readInt()+" ");
}

在这个循环中,文件中的数字数量等于文件的字节长度,因为每个 int 有 4 个字节,因此您正在读取文件末尾。

for (int i=0; i<numbers.length();i++){
    numbers.seek(i*4);
    System.out.print(numbers.readInt()+" ");

}//end for

未来注意事项:在处理此类问题时,在调试器中单步执行代码是找出逻辑问题所在的好方法。你可以在每一步之后查看 RAF 的位置和长度,你应该能够找出你做错了什么。

于 2012-10-12T18:06:37.940 回答