【发布时间】:2017-11-20 17:00:55
【问题描述】:
我正在尝试使用printf 输出格式化字符串。问题涉及银行系统。我有一个 Transaction 类型的 ArrayList,其中包含 id、交易金额、确定是存款还是取款的字符串以及帐户中的余额。
首先程序打印4列,没有问题
System.out.printf("%-20s%-20s%-20s%s\n","Transaction","Withdrawal","Deposit", "Balance");
然后我尝试遍历 ArrayList 并打印出每个事务的信息。一个 if 语句用于确定正在执行的交易,然后我尝试根据是存款还是取款,在正确的列下对齐金额。
for(int i= 0; i < d.size(); i++) {
if(d.get(i).type.equals("Deposit")) {
System.out.printf("%-20d%-40d%-20d%d\n", d.get(i).id, d.get(i).amount, d.get(i).balance);
}else {
System.out.printf("%-20d%-20d%-40d%d\n", d.get(i).id, d.get(i).amount, d.get(i).balance);
}
}
它实际上似乎打印出第一行很棒:
Transaction Withdrawal Deposit Balance
0 7 1007
但是,它会打印出一系列我无法理解的错误
线程“主”java.util.MissingFormatArgumentException 中的异常: java.util.Formatter.format(Unknown Source) 中的格式说明符“%d” java.io.PrintStream.format(未知来源)在 java.io.PrintStream.printf(未知来源)在 Account.printStatement(Account.java:87) 在 Account.main(Account.java:43)
非常感谢任何帮助。谢谢!
【问题讨论】:
-
您缺少 printf 的一个参数
-
为了提高可读性,请使用 for-each 循环:
for (Transaction t : d),然后使用t而不是d.get(i)。