注意:不想要这个问题的答案,因为我想自学,但我很困惑,想知道该怎么做。
因此,对于练习,我必须读取一个输入文件并回显它。
实践问题是创建一个ATM事务,输入文件的一行读取: Stacy Jones,300 D 100
我必须将其输出为:
name
current balance
action (D means deposit)
transaction amount
我目前有名字,为了得到当前的余额,我更改了分隔符以逗号结束了行,但我的问题是在当前余额之前仍有空格(即300)
这是我的代码:
try {
FileInputStream stream = new FileInputStream("src/transactions.txt");
fileIn = new Scanner(stream);
fileIn.useDelimiter(",");
name = fileIn.next();
System.out.println("Customer Name: " + name);
fileIn.reset();
balance = fileIn.nextDouble();
System.out.printf("Checking balance before transaction: %.2f", balance);
} catch (FileNotFoundException e) {
System.out.println("Transactions cannot be found");
}
我收到的错误是:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:857)
at java.util.Scanner.next(Scanner.java:1478)
at java.util.Scanner.nextDouble(Scanner.java:2404)
at MP3.main(MP3.java:30)
答案 0 :(得分:0)
问题在于您的输入。当你做fileIn.nextDouble()
时,你期待双倍。你从文件中获得的实际上是字符串' 300'
,所以前面有一个空格。
扫描程序无法将其转换为double。
这应该指出你已经朝着正确的方向发展了。
答案 1 :(得分:0)
您可以按空格重新熟悉第二个令牌
FileInputStream stream = new FileInputStream("src/transactions.txt");
fileIn = new Scanner(stream);
fileIn.useDelimiter(",");
name = fileIn.next();
System.out.println("Customer Name: " + name);
Scanner s = new Scanner(fileIn.next());
s.useDelimiter(" ");
balance = s.nextDouble();
System.out.printf("Checking balance before transaction: %.2f %n", balance);
System.out.println("Action: "+s.next());
System.out.println("Transaction amount: "+s.nextDouble());
fileIn.reset();