在java中执行程序时出现非法格式错误

时间:2015-09-08 03:41:19

标签: java

我想向用户显示一个表

Name quantity Price Total
a    2        3.0   6.0

正确缩进。 此外,我需要处理所有参数的最大允许值,例如30表示名称,10表示剩余所有参数 我在java中的行下面执行:

System.out.println("Name\tquantity\tPrice\tTotal");
        System.out.printf("%1$30s\t %.10d\t %.10f\t %.10f", product_name, productQuantity, itemprice, productQuantity*itemprice); 

我收到以下错误:

java.util.IllegalFormatPrecisionException

1 个答案:

答案 0 :(得分:0)

使用%-格式填充右侧有空格的数字/字符串:

System.out.printf("%-30s %-10s %-10s %s\n", "Name", "quantity", "Price", "Total");
System.out.printf("%-30s %-10d %-10.1f %-10.1f", "product", 2, (float) 6.1, 2 * 6.1);

结果:

Name                           quantity   Price      Total
product                        2          6,1        12,2   

此外,您的格式字符串中包含错误:

"%1$30s\t %.10d\t %.10f\t %.10f"
"%1$ <- here

1$打破你的格式字符串,从而将格式参数移动1,所以product参数(字符串)实际上代替了第二种格式arg(%.10d),这是预期的一个数字。

因此,由于字符串格式化程序不支持.n精度说明符,因此抛出IllegalFormatPrecisionException

<强> UPD。

为了消除该错误,您应该删除1$说明符,或将其添加到所有的args中:

System.out.printf("%1$30s\t %2$10s\t %3$10s\t %4$10s\n", "Name", "quantity", "Price", "Total");
System.out.printf("%1$30s\t %2$10d\t %3$10f\t %4$10f\n", "product", (int)2, (float)6, (float)2*6); 

结果:

                          Name     quantity       Price       Total
                       product            2    6,000000   12,000000

更精彩的格式:

System.out.printf("%1$30s\t %2$10s\t %3$10s\t %4$10s\n", "Name", "quantity", "Price", "Total");
System.out.printf("%1$30s\t %2$10d\t %3$10.1f\t %4$10.1f\n", product, (int)amount, (float)price, (float)(amount * price)); 

给出:

                          Name     quantity       Price       Total
                       product            2         6,1        12,2