我尝试使用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
然而,它会打印出一系列我无法理解的错误
线程中的异常&#34; main&#34; java.util.MissingFormatArgumentException: 格式说明符&#39;%d&#39;在java.util.Formatter.format(未知来源)at java.io.PrintStream.format(未知来源)at java.io.PrintStream.printf(未知来源)at Account.printStatement(Account.java:87)at Account.main(Account.java:43)
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
这实际上意味着您有一个没有相应值的%d:
System.out.printf("%-20d%-40d%-20d%d\n", d.get(i).id, d.get(i).amount, d.get(i).balance);
您有4个格式说明符和3个值。
%-20d
%-40d
%-20d
%d
值:
d.get(i).id
d.get(i).amount
d.get(i).balance