IllegalFormatPrecisionException tout en essayant de chaîne de format
Je suis en train d'écrire un programme qui demande à l'utilisateur d'entrer deux de 3×3 matrices et affiche leur produit.
Par exemple, un utilisateur peut entrer:
La Matrice A: 2 4 6 8 10 12 14 16 18 La Matrice B: 1 2 3 4 5.6 6.6 7.4 8.1 9
Ci-dessous est ce que j'ai essayé, mais je reçois ce message d'erreur. Toute aide pour me diriger dans la bonne direction serait appréciée. Je vais essayer d'obtenir à la première décimale:
Exception in thread "main" java.util.IllegalFormatPrecisionException: 2 à java.util.Formateur De$FormatSpecifier.checkInteger(Formateur.java:2892) à java.util.Formateur De$FormatSpecifier.(Formateur.java:2643) à java.util.Module de formatage.parse(Formateur.java:2480) à java.util.Module de formatage.format(Formatage.java:2414) à java.io.PrintStream.format(PrintStream.java:920) à java.io.PrintStream.printf(PrintStream.java:821) au Exercise6_25.principale(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();
}
}
}
OriginalL'auteur relyt | 2010-02-08
Vous devez vous connecter pour publier un commentaire.
Vous utilisez le
%d
prescripteur, ce qui nécessite un argument entier -- mais vous êtes en lui donnant unString
(parce quec[i][j]+" "
convertitc[i][j]
àString
lors de la concaténation).Aussi, le
%d
spécificateur de ne pas utiliser une virgule décimale. Depuis les types intégraux peuvent être implicitement converti pour les types à virgule flottante, le%f
spécificateur est ce que vous cherchez.Et enfin, le nombre après la virgule dans le spécificateur de format est ce qu'il indique combien de décimales. Vous dites que vous voulez seulement une décimale après la virgule, donc, nous allons faire que un 1.
Donc, ce que nous fin, c'est ça:
Voir le
Formateur
Javadoc pour une (un peu ahurissant) description du possible les spécificateurs de format. (Ne vous inquiétez pas trop si vous ne pouvez pas comprendre tout ce qu'il; vous n'aurez jamais besoin de plus de toute façon.)OriginalL'auteur Michael Myers
Vous ne pouvez pas le format des nombres entiers à l'aide d'un point décimal dans la conversion. Depuis
c[i][j]
est un double, vous pouvez utiliser un virgule flottante de conversion:Au lieu de:
Voir le page d'aide pour le formateur de syntaxe pour plus d'informations.
OriginalL'auteur Mark Byers
Êtes-vous sûr que vous avez voulu dire "%.2d" dans votre printf plutôt que de "%.2f"?
Vous avez généralement utilisez d pour les valeurs entières, vous avez en double dans votre matrice.
OriginalL'auteur Uri
Votre erreur est probablement ici:
Consultez la documentation de la façon dont les valeurs sont mis en forme lors de l'impression.
OriginalL'auteur Drejc