2

初めてのポスターはこちら。私の質問をご覧いただきありがとうございます。RandomAccessFile から特定の範囲のバイトを読み取ってから、その範囲のバイトをチェックして、それらがすべて 0 に等しいかどうかを確認する必要がある宿題の問題で、私はたくさんの問題を抱えています。これに関係していますが、私が見つけたものは何もありません。提供されたヘルプをいただければ幸いです。

この問題は、学校の架空の生徒のデータを含む特定のファイルがあることを示しています。これらの生徒はそれぞれ 40 バイトのコードで表されますが、ファイルの最初の 4 バイトは、学校の生徒の総数 (75 人としましょう) の整数でなければなりません。バイト 4 から 43 は最初の生徒 (#0) を表し、44 から 83 は 2 番目の生徒 (#1) を表し、以下同様です。生徒が別の学校に転校すると、生徒の 40 バイトはすべて 0 (文字) で上書きされます。

ファイル名を表す文字列と生徒数を表す整数を受け取る「transferStudent」というメソッドを作成しました。例外がある場合、または何らかの理由でファイルが生徒のデータを上書きしない場合は、false を返します。

これまでの私の仕事は次のとおりです。

public static Boolean transferStudent(String fileName, int studentNum) {

    RandomAccessFile file = new RandomAccessFile(fileName, "rw");
    file.writeInt(75);
    try {
        if (studentNum == 0) {
            file.seek(4);
            file.writeBytes("0000000000000000000000000000000000000000"); // 40 zero characters
            file.seek(4);
            for (int i = 0; i < 40; i++) {
                if (file.read() == 0) {
                    return true;
                }
            }
            return false;
        }
        else if (studentNum > 0) {
            file.seek(4 + (studentNum * 40));
            file.writeBytes("0000000000000000000000000000000000000000"); // 40 more zeroes
            file.seek(4);
            for (int i = (4 + (studentNum * 40)); i < (44 + (studentNum * 40)); i++) {
                if (file.read() == 0) {
                    return true;
                }
            }
            return false;
        }
        else {
            return false;
        }
    }
    catch (Exception e) {
        return false;
    }
}

作成されたバイナリ ファイルを表示すると、studentNum に対応する範囲に実際に 0 があります。ただし、コンソールには常に false が出力されます。何らかの理由でチェックが機能していません。私はこれで髪を引き裂く寸前です。助けてください!

4

2 に答える 2