0

私はバイナリファイルを読み込んでtxtファイルから更新するプログラムに取り組んでいますが、突然このエラーをスローし始めました。

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:907)
    at java.util.Scanner.next(Scanner.java:1416)
    at StockManage.updateInv(StockManage.java:134)
    at StockManage.main(StockManage.java:173)

エラーの原因となるコードはこちら

try
{
    Scanner trans = new Scanner(new File(file));
    RandomAccessFile inv = new RandomAccessFile (file2,"rws");
    String tempName = "Temp" + (int)(Math.random()*1000000) + ".dat";
    RandomAccessFile newInv = new RandomAccessFile (tempName , "rws");
    File newFile = new File(tempName);

    String transISBN = trans.next();
    String author = inv.readUTF();
    String title = inv.readUTF();
    String iSBN = inv.readUTF();
    int amount = inv.readInt();

    while (inv.getFilePointer()<=inv.length())
    {
        boolean empty = true;

        while (empty&&trans.hasNext())
        {

            if (iSBN.compareTo(transISBN)<0)
            {
                empty = false;
                break;
            }
            else if (iSBN.compareTo(transISBN)==0)
            {
                int change = trans.nextInt();
                amount += change;
                transISBN = trans.next();
            }
        }

        newInv.writeUTF(author);
        newInv.writeUTF(title);
        newInv.writeUTF(iSBN);
        newInv.writeInt(amount);

        author = inv.readUTF();
        title = inv.readUTF();
        iSBN = inv.readUTF();
        amount = inv.readInt();


    }

私は本当にこれで立ち往生しているので、どんな助けも素晴らしいでしょう

4

2 に答える 2

2

Scanner オブジェクトで next() を呼び出す前に、hasNext() を呼び出して、実際に読み取るデータが他にあるかどうかを確認する必要があります。

于 2013-04-11T15:43:32.050 に答える
0

このコード部分はエラーが発生しやすいです:

else if (iSBN.compareTo(transISBN)==0)
{
    int change = trans.nextInt();
    amount += change;
    transISBN = trans.next();
}

で制御trans.hasNext()しますが、その上に を配置するwhile loop前に、問題は解決されると思います。transISBN = trans.next();if(trans.hasNext())

于 2013-04-11T15:49:53.950 に答える