java - 尝试格式化字符串时出现 IllegalFormatPrecisionException

标签 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

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/

相关文章:

java - 试图列出来自内部 sdcard android 的所有文件夹/文件,但得到一个 null

java - JDBC中如何获取插入ID?

java - 在 Jasper Reports 中分组

java - JSONObject 文本必须以 '{' at 1 [character 2 line 1] 开头,并出现 '{' 错误

java - libgdx font.setscale 给出巨大的值

Java boolean null 转换

java - 在 Java 中以编程方式设置 Linux 环境变量

java - JEdi​​torPane 和 HTMLEditorKit 的替代品——太慢了

java - 在代码中编写此公式是否有更清晰/更简单的方法?

java - 问题启动 Cassandra。 Java 运行时环境 : 检测到 fatal error