我正在编写一个程序,从文件中读取并打印出所代表的金额。例如,我的输入文件的文本是
3 pennies
2 quarters
1 pennies
23 nickels
4 dimes
该程序应该计算总金额并打印出来。当程序编译时,我得到例外IllegalFormatConversionException
。我怀疑我已经错误地检查了字符串(硬币名称),但我不确定如何修复程序。我会很感激一些指导。这是我的代码:
import java.util.Scanner;
import java.io.*;
public class CountCoins {
public static void main (String [] args) throws IOException {
Scanner input = new Scanner(new FileReader("input.txt"));
int sum = 0;
while (input.hasNextLine()) {
int number = input.nextInt();
String coin = input.next();
sum += countMoney(number, coin);
}
System.out.printf("Total money = $%f \n", sum);
}
public static double countMoney(int num, String coin) {
if (coin.equals("pennies")) {
return num * 0.01;
}
else if (coin.equals("nickels")) {
return num * 0.05;
}
else if (coin.equals("dimes")) {
return num * 0.10;
}
else if (coin.equals("quarters")) {
return num * 0.25;
}
return 0;
}
}
您使用整数int sum = 0;
来汇总您的值,同时使用$%f
,用于格式化float
。这就是你在这里获得IllegalFormatConversionException
的原因。
我认为你的意图是使用浮点值,如你的方法double countMoney
所示,所以我建议你将你的sum
改为double
。否则,您将获得价值损失。
double sum = 0;
while (input.hasNextLine()) {
int number = input.nextInt();
String coin = input.next();
sum += countMoney(number, coin);
}
System.out.printf("Total money = $%f \n", sum);