- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试编写一个程序,提示用户输入两个 3×3 矩阵并显示他们的乘积。
例如,用户可以输入:
Matrix A: 2 4 6 8 10 12 14 16 18Matrix B: 1 2 3 4 5.6 6.6 7.4 8.1 9
Below is what I have tried, but I keep getting this error. Any help to point me in the right direction would be appreciated. I'm trying to get it to one decimal place:
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();
}
}
}
最佳答案
您正在使用 %d
说明符,它需要一个整数参数——但是您给它一个 String
(因为 c[i][j ]+""
在连接时将 c[i][j]
转换为 String
。
此外,%d
说明符根本不使用小数点。由于整数类型可以隐式转换为浮点类型,%f
说明符就是您要查找的内容。
最后,格式说明符中小数点后的数字告诉它要转到多少个小数位。你说你只想要一位小数,所以让我们把它设为 1。
所以我们最终得到的是:
System.out.printf("%.1f ", c[i][j]);
参见 Formatter
Javadocs对于所有可能的格式说明符的(有点令人难以置信的)描述。 (如果您不能理解那里的所有内容,请不要太担心;反正您永远不需要其中的大部分内容。)
关于java - 尝试格式化字符串时出现 IllegalFormatPrecisionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224719/
我正在尝试编写一个程序,提示用户输入两个 3×3 矩阵并显示他们的乘积。 例如,用户可以输入: Matrix A: 2 4 6 8 10 12 14 16 18Matrix B: 1 2 3 4 5.
我是一名新的 Java 编码员,在使用 printf 将值四舍五入到两位小数时遇到错误。谁能帮助我理解错误的原因以及如何解决该错误? 代码 import java.util.Scanner; publ
我的代码可以编译,但 System.out.printf(%8d, %.1f...etc) 中出现运行时错误; 这是我的代码: import java.io.*; import java.util.S
我是一名优秀的程序员,十分优秀!