7 Stimmen

IllegalFormatPrecisionException beim Versuch, eine Zeichenkette zu formatieren

Ich versuche, ein Programm zu schreiben, das den Benutzer auffordert, zwei 3×3-Matrizen einzugeben und ihr Produkt anzuzeigen.

Zum Beispiel kann ein Benutzer eingeben:

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

Ich habe Folgendes versucht, aber ich erhalte immer wieder diese Fehlermeldung. Für jede Hilfe, die mich in die richtige Richtung führt, wäre ich dankbar. Ich versuche, es auf eine Dezimalstelle zu bekommen:

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

21voto

Michael Myers Punkte 183216

Sie verwenden die %d Spezifizierer, der ein Integer-Argument erfordert - aber Sie geben ihm ein String (weil c[i][j]+" " konvertiert c[i][j] a String bei der Verkettung).

Auch die %d Spezifizierer verwendet überhaupt keinen Dezimalpunkt. Da ganzzahlige Typen implizit in Fließkommatypen konvertiert werden können, ist der %f Spezifizierer ist, was Sie suchen.

Und schließlich gibt die Zahl nach dem Dezimalpunkt im Formatbezeichner an, wie viele Dezimalstellen erreicht werden sollen. Sie sagen, Sie wollen nur eine Dezimalstelle, also machen wir eine 1 daraus.

Wir haben also folgendes Ergebnis:

System.out.printf("%.1f ", c[i][j]); 

Siehe die Formatter Javadocs für eine (etwas verwirrende) Beschreibung aller möglichen Formatspezifikationen. (Machen Sie sich keine Sorgen, wenn Sie nicht alles verstehen; das meiste davon werden Sie sowieso nie brauchen).

6voto

Mark Byers Punkte 761508

Sie können Ganzzahlen nicht mit Hilfe einer Dezimalkomma bei der Konvertierung. Da c[i][j] ein Double ist, können Sie eine Fließkomma Umwandlung:

System.out.printf("%.2f ", c[i][j]);

Anstelle von:

System.out.printf("%.2d", c[i][j]+" ");

Siehe die Hilfeseite für die Formatierungssyntax für weitere Informationen.

0voto

Drejc Punkte 13878

Ihr Fehler liegt wahrscheinlich hier:

System.out.printf("%.2d", c[i][j]+" ");

Prüfen Sie in der Dokumentation, wie die Werte beim Ausdruck formatiert werden.

0voto

Uri Punkte 86472

Sind Sie sicher, dass Sie in Ihrem printf "%.2d" und nicht "%.2f" sagen wollten? Normalerweise verwenden Sie d nur für ganzzahlige Werte, in Ihrer Matrix haben Sie Doubles.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X