【问题标题】:How do I resolve these exceptions?如何解决这些异常?
【发布时间】:2015-11-09 21:45:56
【问题描述】:

公平地说,我没有得到这些例外,而只是试图找到一个方法来覆盖这些例外。例外是 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() 以摆脱异常,但它只是引入了另一个异常。

我也尝试过使用正则表达式来检查字符串是否为数字的方法。问题是我使用的变量不是字符串,我不想创建更多检查。

在我看来,我不再做什么,发生异常后我无法恢复我的扫描仪。

【问题讨论】:

  • 刚开始:您需要包含实际的异常消息:将System.err.println(ex.getMessage()) 放入您的catch 以查看实际发生的情况。此外,您可能希望打印异常的堆栈跟踪,以查看程序的哪一行抛出它(将 ex.printStackTrace(System.err) 放入您的 catch 中)
  • 它与 notAGenuineConcernException() 或 didNotReadAboutExceptionsExveption 相同,它会启动一个rollerCoasterOfExceptions。
  • @Barranka 就像我说的那样,我没有遇到异常,而是试图找到从这两个异常中恢复的方法,因为它们是最重要的。

标签: java file io checked-exceptions


【解决方案1】:

在解析之前,您可以使用 scan.hasNextDouble 测试它是否为双精度并解析或读取数字,否则您设置默认值并通过读取不正确的值移动下一步,不要对其执行任何操作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2016-08-10
    相关资源
    最近更新 更多