我正在尝试编写一个程序,提示用户输入两个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
以下是我的尝试,但我一直收到此错误。任何帮助指出我正确的方向将不胜感激。我想把它放到一个小数位:
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)
import java.util.Scanner;
public class matrixCalc
{
public static void main(String args[])
{
Scanner s= new Scanner(System.in);
int i,j,k;
int n=3;
double a[][]= new double[n][n];
double b[][]= new double[n][n];
double c[][]= new double[n][n];
System.out.println("enter the array elements of a:");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=s.nextDouble();
}
System.out.print(" ");
}
System.out.println(" ");
System.out.println("enter the array elements of b:");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
b[i][j]=s.nextDouble();
}
System.out.print(" ");
}
System.out.println(" ");
System.out.println("the result matrix is:");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
c[i][j]+=a[i][k]*b[k][j];
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
System.out.printf("%.2d", c[i][j]+" ");
}
System.out.println();
}
}
}
答案 0 :(得分:17)
您正在使用%d
说明符,这需要一个整数参数 - 但您要给它一个String
(因为c[i][j]+" "
将c[i][j]
转换为String
连接时)。
此外,%d
说明符根本不使用小数点。由于可以将整数类型隐式转换为浮点类型,因此%f
说明符就是您要查找的内容。
最后,格式说明符中小数点后面的数字是告诉它要去的小数位数。你说你只想要一个小数位,所以让它为1。
所以我们最终得到的是:
System.out.printf("%.1f ", c[i][j]);
有关所有可能的格式说明符的(有点令人难以置信的)描述,请参阅Formatter
Javadocs。 (如果你不能理解那里的一切,不要太担心;无论如何你永远不会需要大部分。)
答案 1 :(得分:6)
您无法在转换中使用小数点格式化整数。由于c[i][j]
是双倍的,因此您可以使用浮点转换:
System.out.printf("%.2f ", c[i][j]);
而不是:
System.out.printf("%.2d", c[i][j]+" ");
有关更多信息,请参阅help page了解格式化程序语法。
答案 2 :(得分:0)
您的错误可能在这里:
System.out.printf("%.2d", c[i][j]+" ");
检查打印输出时格式化值的文档。
答案 3 :(得分:0)
你确定你打算在你的printf中说“%.2d”而不是“%.2f”吗? 您通常只使用d作为整数值,您的矩阵中有两倍。