java - while循环读取csv文件越界

标签 java csv while-loop

我正在开发一个从包含银行帐户列表的文件中读取的程序。我不断遇到 IndexOutOfBoundsException 错误,但不确定原因。当我将银行账户直接放入代码中(而不是从文件中读取)时,它工作得很好,这让我相信我的 while 循环在某个地方搞砸了。我怀疑它没有正确循环,但我并不肯定。不幸的是,我对 while 循环没有太多经验。

我正在读取的文件,按帐户类型/名称/值(value)/费率的顺序列出:

1,Waterford Ellingsworth,4350.0,0.002
2,Bethanie Treadwell,500.0,0.35
3,Ira Standish,50000,0.1,59,0.1

实际程序本身:

 Scanner infile = new Scanner("‪C:/Users/Josh/Desktop/prog5input.csv");
    while (infile.hasNextLine()) {
        Scanner s2 = new Scanner(infile.nextLine()); // put string from file into second Scanner object
        s2.useDelimiter(",");
        if (s2.hasNextInt()) {
            int type = s2.nextInt(); 
            if (type == 1) {
                String accountHolder = s2.next();
                double accountInitial = s2.nextDouble();
                double accountRate = s2.nextDouble();
                bank.addNewAccount(new SavingsAccount(accountHolder, accountInitial, accountRate));
                // read fields for Type 1 accounts and create new Type 1 object
            }
            else if (type == 2) {
                String accountHolder = s2.next();
                double accountInitial = s2.nextDouble();
                double accountCostPerMonth = s2.nextDouble();
                bank.addNewAccount(new CheckingAccount(accountHolder, accountInitial, accountCostPerMonth));
            }
            else if (type == 3) {
                String accountHolder = s2.next();
                double accountInitial = s2.nextDouble();
                double accountRate = s2.nextDouble();
                int disbursementAge = s2.nextInt();
                double earlyWithdrawalPenalty = s2.nextDouble();
                bank.addNewAccount(new IRAAccount(accountHolder, accountInitial, accountRate, disbursementAge, earlyWithdrawalPenalty));
            }
        } //ends if statement s2.hasNextInt()
        // now go to top of loop, check infile to see if there is another line to read
    } //ends while loop

编辑以包含输出:

Creating accounts...

Performing transactions...
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at Bank.getAccountByIndex(Bank.java:28)
    at BankDriverFileInput.main(BankDriverFileInput.java:58)

这是我的整个程序的链接:https://drive.google.com/drive/folders/0BysdkYqrEP7kazNhMXpQSzd4bUE?usp=sharing

最佳答案

替换

Scanner infile = new Scanner("‪C:/Users/Josh/Desktop/prog5input.csv");

Scanner infile = new Scanner(new FileInputStream("‪C:/Users/Josh/Desktop/prog5input.csv"));

因为您的代码,Scanner 的输入流将是字符串“c:....”,而不是它代表的文件 .

关于java - while循环读取csv文件越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42918094/

相关文章:

java - 同步和可见范围

java - 如果 Thread 程序在其自身内部调用 start() 方法,会发生什么情况?

java - Java 中的撒克逊语 : XSLT for CSV to XML

c - 牛顿收敛法不起作用

java - 在发送到 Rest Web 服务之前解析和编码 URL

java - 有没有办法将电话号码标准化为 1-222-444-5555(根据北美标准)?

python - 根据不同 DataFrame 中的条件从 DataFrame 中消除行

php - 在php中读取.csv文件

c - 循环因条件终止,但条件是必要的?

php - 如何在 php 中添加 while 循环创建的图像的链接?