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

时间:2010-02-08 20:43:27

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

以下是我的尝试,但我一直收到此错误。任何帮助指出我正确的方向将不胜感激。我想把它放到一个小数位:

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();
        }
    }
}

4 个答案:

答案 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作为整数值,您的矩阵中有两倍。