我正在尝试编写一种方法,打印从 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)