在java中执行程序时获取非法格式错误

在java中执行程序时获取非法格式错误,java,Java,我想向用户显示一个表 Name quantity Price Total a 2 3.0 6.0 适当地缩进。 此外,我还需要考虑所有参数的最大允许值,例如30表示name,10表示剩余的all 我在java中执行以下代码行: System.out.println("Name\tquantity\tPrice\tTotal"); System.out.printf("%1$30s\t %.10d\t %.10f\t %.10f", product_nam

我想向用户显示一个表

Name quantity Price Total
a    2        3.0   6.0
适当地缩进。 此外,我还需要考虑所有参数的最大允许值,例如30表示name,10表示剩余的all 我在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

您使用的是
%d
说明符,该说明符需要一个整数参数,但您可能给它一个参数,而不是该参数,例如
字符串
。或者可以是-1以外的负值。引自:

精度为负值时引发未经检查的异常 除-1之外,转换不支持精度或 否则不支持该值


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

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   
                          Name     quantity       Price       Total
                       product            2    6,000000   12,000000
此外,您的格式字符串中存在错误:

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

Name                           quantity   Price      Total
product                        2          6,1        12,2   
                          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

您提供给
printf
的值的类型是什么?它的字符串、int、double和double。但是如果字符串和数字超过limit@Aquarius24,但相关的部分确实修复了您的
非法格式精度异常
错误,对吗?看看更新。如果答案为已接受,则将其标记为已接受。此外,如果
字符串和数字超出限制,缩进仍将中断。。。