Java 尝试格式化字符串时发生IllegalFormatPrecisionException
我正在尝试编写一个程序,提示用户输入两个3×3矩阵并显示其乘积 例如,用户可以输入: Matrix A: 2 4 6 8 10 12 14 16 18 Matrix B: 1 2 3 4 5.6 6.6 7.4 8.1 9 矩阵A:2 4 6 8 10 12 14 16 18 矩阵B:12345.667.4819 下面是我已经尝试过的,但我不断地得到这个错误。如果您能帮我指出正确的方向,我们将不胜感激。我想把它保留到小数点后一位: Exception in thread "main" java.util.IllegalFormatPrecisionException: 2 at java.util.Formatter$FormatSpecifier.checkInteger(Formatter.java:2892) at java.util.Formatter$FormatSpecifier.(Formatter.java:2643) at java.util.Formatter.parse(Formatter.java:2480) at java.util.Formatter.format(Formatter.java:2414) at java.io.PrintStream.format(PrintStream.java:920) at java.io.PrintStream.printf(PrintStream.java:821) at Exercise6_25.main(Exercise6_25.java:55) 线程“main”java.util.IllegalFormatPrecisionException中的异常:2 位于java.util.Formatter$FormatSpecifier.checkInteger(Formatter.java:2892) 位于java.util.Formatter$FormattSpecifier。(Formatter.java:2643) 位于java.util.Formatter.parse(Formatter.java:2480) 位于java.util.Formatter.format(Formatter.java:2414) 位于java.io.PrintStream.format(PrintStream.java:920) 位于java.io.PrintStream.printf(PrintStream.java:821) 在Exercise6_25.main(Exercise6_25.java:55)Java 尝试格式化字符串时发生IllegalFormatPrecisionException,java,Java,我正在尝试编写一个程序,提示用户输入两个3×3矩阵并显示其乘积 例如,用户可以输入: Matrix A: 2 4 6 8 10 12 14 16 18 Matrix B: 1 2 3 4 5.6 6.6 7.4 8.1 9 矩阵A:2 4 6 8 10 12 14 16 18 矩阵B:12345.667.4819 下面是我已经尝试过的,但我不断地得到这个错误。如果您能帮我指出正确的方向,我们将不胜感激。我想把它保留到小数点后一位: Exception in thread "main" java.
import java.util.Scanner;
公共类matrixCalc
{
公共静态void main(字符串参数[])
{
扫描仪s=新的扫描仪(System.in);
int i,j,k;
int n=3;
双a[][]=新双[n][n];
双b[][]=新双[n][n];
双c[][]=新双[n][n];
System.out.println(“输入a:”)的数组元素;
对于(i=0;i您使用的是%d
说明符,它需要一个整数参数——但您给它一个字符串
(因为c[i][j]+”
在连接它时将c[i][j]
转换为String
)
另外,%d
说明符根本不使用小数点。由于整数类型可以隐式转换为浮点类型,因此您需要的是%f
说明符
最后,格式说明符中小数点后的数字告诉它要到多少位小数。你说你只需要一位小数,所以让我们把它设为1
因此,我们得出的结论是:
System.out.printf("%.1f ", c[i][j]);
有关所有可能的格式说明符的描述(有点令人难以置信)(如果您无法理解其中的所有内容,请不要太担心;无论如何,您永远不会需要其中的大部分内容。)您的错误可能在这里:
System.out.printf("%.2d", c[i][j]+" ");
检查打印时如何格式化值的文档。在转换中不能使用小数点来格式化整数。由于c[i][j]
是双精度的,因此可以使用浮点转换:
System.out.printf("%.2f ", c[i][j]);
而不是:
System.out.printf("%.2d", c[i][j]+" ");
有关格式设置程序语法的详细信息,请参阅。您确定要在printf中使用“%.2d”而不是“%.2f”吗?
你通常只对整数值使用d,你的矩阵中有双精度。是的。就是这样。非常感谢马克。我把%.1f改成了小数点后一位。也谢谢你,mmyers。这就是解决办法。有时我盯着这些太久了,我只是错过了简单的事情。谢谢!
System.out.printf("%.2d", c[i][j]+" ");