-2

公平を期すために、私はこれらの例外を取得していませんが、これらの例外をカバーする方法を見つけようとしているだけです。例外は NosuchElementException と NumberFormatException です。

注: txt ファイルに問題がないため、このプログラムは完全に機能します。ただし、数字ではないものを導入すると失敗します。

問題発生する可能性がある主なクラスは次のとおりです。

BankReader.java

package bankreader;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class BankReader
{

    public static void main(String[] args)
    {
        BankReader reader = new BankReader();
        Scanner scan = new Scanner(System.in);
        String fileName = "";
        boolean finished = false;

        while(!finished)
        {
            try
            {
                System.out.print("Enter the name of the file: ");
                fileName = scan.nextLine();
                scan = reader.checkFile(fileName, scan);
                reader.readFile(scan);
                finished = true;
            }
            catch(IOException ex)
            {
                System.out.print("\nThis file does not exist or had");
                System.out.println(" characters that were not numbers. Please enter a different file.\n");
            }
        }

        scan.close();
    }

    public Scanner checkFile(String fileName, Scanner scan) throws IOException
    {
        File file = new File(fileName);
        scan = new Scanner(file);          
        return scan;
    }

    public void readFile(Scanner scan)
    {
        String accountNumber = "";
        double accountBalance = -1;
        Bank bank = new Bank();

        while(scan.hasNext())
        {
            accountNumber = scan.next();
            accountBalance = Double.parseDouble(scan.next());

            BankAccount bankAccount = new BankAccount(accountNumber, accountBalance);
            bank.addAccount(bankAccount);
        }

        if (bank.numberOfAccounts() > 0)
        {
            BankAccount maxBalance = bank.getHighestBalance();
            System.out.println(maxBalance.getAccountNumber() + ": " + "$" + maxBalance.getBalance());
        }
        else
            System.out.println("\nThe file had no accounts to compare.");
    }
}

ここに私が取り組んでいるtxtファイルがあります:

346583155444415 10000.50
379611594300656 5000.37
378237817391487 7500.15
378188243444731 2500.89
374722872163487 25000.10
374479622218034 15000.59
342947150643707 100000.77

これは私自身の txt ファイルですが、数字ではない文字、または口座番号はあるが残高がない文字、またはその逆の文字が含まれるテキスト ファイルにアクセスするとどうなるでしょうか。これらの例外にどのように対処できるか知りたいです。

私が試したこと:

例外から離れるために scan.nextLine() を実行しようとしましたが、別の例外が発生するだけです。

また、正規表現を使用して文字列が数値かどうかを確認する方法を使用しようとしました。問題は、文字列ではない変数を使用していて、それ以上チェックを作成したくないことです。

例外が発生した後、スキャナーを回復できず、何をしてもうまくいかないように思えます。

4

1 に答える 1

0

解析する前に、scan.hasNextDouble で double かどうかをテストし、数値のみを解析または読み取ることができます。それ以外の場合は、デフォルト値を設定し、間違った値を読み取って次に移動し、何もしません。

于 2015-11-09T22:04:25.603 に答える