为什么这段代码返回 No-Such-Element-Exception? [关闭]

问题描述 投票:0回答:0

我正在尝试编写一种方法,打印从 testCases 文件中读取的数据,并使用它在 switch 语句的帮助下对所述帐户执行某些操作。在这种情况下,我正在尝试将钱存入上述账户。该程序读取第一个字母以了解要调用的方法。然后,它读取接下来的四个数字作为帐号。之后,根据调用的字母,程序将读取下一个双倍作为存款金额。如果该金额是不可能存入的金额,它会打印一条错误消息通知用户。这是正在读取的测试用例文件。 D是押金。 Q是退出。该文件的语法是(做什么,acctNumber,存入金额)

D 9685 1100.67
d 7187 -2900.08
D 9000 701.66
Q

这里是输入文件

7187 3402.67
9685 210.99

(已编辑)这是完整代码的简化版本

import java.io.*;
import java.util.Scanner;

public class mre {
    public static int readAccts(Scanner inputFile, PrintWriter outputFile, int[] acctNum, double[] balance) {
        int numAccts = 0;
        do {
            System.out.println("Enter ID and balance. ");
            acctNum[numAccts] = inputFile.nextInt();
            balance[numAccts] = inputFile.nextDouble();
            numAccts++;
        }while (inputFile.hasNext());
        return numAccts;
    }
    public static int findAcct(Scanner inputFile, int[] acctNum, int numAccts, int account) {
        int var;
        var = inputFile.nextInt();
        for(int x=0;x < numAccts; x++) {
            if (acctNum[x] == var) {
            account = x;
            }
        }
        return account;
    }
    public static void deposit(Scanner testCases,Scanner inputFile, PrintWriter outputFile, int[] acctNum, double[] balance, int numAccts) {
        int account = -1;
    double dp = 0;
    dp = testCases.nextDouble();
        account = findAcct(inputFile,acctNum, numAccts, account);
        outputFile.printf("Depositing money...");
        if (account== -1)
             outputFile.printf("Account not found.");
        else
            outputFile.printf("\nDepositing money into account number: %1d \nCurrent balance: %1.2f\nEnter amount to deposit: %1.2f", acctNum[account], balance[account], dp);
        
        
        if (dp < 0 || dp == 0)
            outputFile.printf("\n Invalid deposit amount: Cannot deposit negative/zero dollars. ");
        else {
            balance[account] += dp;
            outputFile.printf("\nSuccessfully deposited $%1.2f Into account %1d. new balance is: $%1.2f",dp,acctNum[account], balance[account]); 
            
            
        }
        
}           
    
    public static void main(String[] args) throws IOException{
        // TODO Auto-generated method stub

        PrintWriter outputFile;
        outputFile = new PrintWriter("your output file name here");
        File myinputFile = new File("your input file path here");
        Scanner inputFile = new Scanner(myinputFile);
        File mytestcases = new File("your test cases path here");
        Scanner testCases = new Scanner(mytestcases);
        char slct;
        final int MAX_NUM = 50;
        boolean notDone = true;
        double[] balance = new double[MAX_NUM];
        int[] acctNum = new int[MAX_NUM];
        int numAccts;
        int account;
        numAccts = readAccts(inputFile, outputFile, acctNum, balance);
        outputFile.flush();
        do {
            String choice = testCases.next();
            slct = choice.charAt(0);
            switch (slct) {
            // tell switch statement which method to call depending on the user's input
            case 'D', 'd':
                deposit(inputFile,testCases, outputFile, acctNum, balance, numAccts);
                break;
            case 'Q', 'q':
                notDone = false;
                break;
            default:
                outputFile.printf("\nError; Invalid selection. " + choice + " is an invalid selection.\n" );
            }
            
            outputFile.flush();
        } while (notDone == true);
        outputFile.printf("\nIn total, there are " + numAccts + " accounts.");
        outputFile.flush();
        inputFile.close();
        outputFile.close();
        testCases.close();
    }
}

我不明白为什么这个程序返回 NoSuchElementException,当它应该读取双倍作为存款金额时。相反,它根本就不是阅读。我该如何解决? 错误信息:

Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:941)
    at java.base/java.util.Scanner.next(Scanner.java:1598)
    at java.base/java.util.Scanner.nextDouble(Scanner.java:2569)
    at mre.deposit(mre.java:28)
    at mre.main(mre.java:72)
java io nosuchelementexception
© www.soinside.com 2019 - 2024. All rights reserved.