初めてのポスターはこちら。私の質問をご覧いただきありがとうございます。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 が出力されます。何らかの理由でチェックが機能していません。私はこれで髪を引き裂く寸前です。助けてください!