Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试格式化字符串时发生IllegalFormatPrecisionException_Java - Fatal编程技术网

Java 尝试格式化字符串时发生IllegalFormatPrecisionException

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.

我正在尝试编写一个程序,提示用户输入两个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)
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]+" ");