-1

ファイル items.dat から情報を読み取り、入手可能なアイテム (数量が 0 より大きい) のみの情報 (バーコード、数量、価格) とそれに続く期待収入を含む availableItems.dat という名前の別のファイルを作成するプログラムが必要です。それらすべてのアイテムを販売することから。期待される収入は、すべてのアイテムの数量*価格の合計として測定できます...私はそうしましたが、EOFException例外があります。理由はわかりませんか?

ファイル内の情報は次のように記録されます。

77777 5 6.7 .. .. ~ 6 アイテム

私のコードは:

import java.io.*;
class items{
public static void main(String[] args) throws IOException{



File f=new File("items.dat");

FileInputStream ff=new FileInputStream(f); 

DataInputStream df=new DataInputStream(ff);

int[] barcod=new int[6];
int[] quan=new int[6];
double[] price=new double[6]; 
 int i=0;
 try{
while (i<barcod.length)
{

barcod[i]=df.readInt();
quan[i]=df.readInt();
 price[i]=df.readDouble();

i++;
}

File f2=new File("availableItems.dat");
FileOutputStream ff2=new FileOutputStream(f2);
DataOutputStream dou=new DataOutputStream(ff2);

int s=0;
double sumquan=0;
double sumpri=0;
while (s<6)
{
if (quan[s]!=0)
{
dou.writeInt(barcod[s]);
dou.writeInt(quan[s]);
dou.writeDouble(price[s]);
sumpri+=price[s];
sumquan+=quan[s];

}
s++;
}
dou.writeDouble(sumpri*sumquan);
}


catch(EOFException e){
            System.out.println(e);

        }
        finally{
             df.close();  
        }
    }
} 
4

1 に答える 1

0

各ループ反復でファイルから読み取っているバイト数が多すぎます。6 番目の項目に到達するまでに、ファイルには読み取るのに十分なバイト数が残っていません。

ファイルのフォーマットを再確認してください。コードを考えると、長さは 96 バイトである必要があります (2 ints * 4 バイト + 1 double * 8 バイト = 16 バイト * 6 アイテム)。ファイルを 16 進エディタで開くと役立ちます。

readFloat()代わりに使用する必要があるかもしれません。これは、ファイルから 8 バイトではなく 4 バイトのみを読み取ります。

于 2015-04-10T15:04:25.983 に答える