Java 不知道为什么我的代码会给我一个;“非法格式转换异常”;错误?

Java 不知道为什么我的代码会给我一个;“非法格式转换异常”;错误?,java,Java,我敢肯定这个错误是由最后一行引起的。。据我所知,我不喜欢使用变量“%d”。但这不是整数的有效输入吗 import java.util.Scanner; public class total_cost { public static void main(String[] args) { int TVs; int VCRs; int controller; int CD; int recorder;

我敢肯定这个错误是由最后一行引起的。。据我所知,我不喜欢使用变量“%d”。但这不是整数的有效输入吗

import java.util.Scanner;

public class total_cost {
    public static void main(String[] args) {

        int TVs;
        int VCRs;
        int controller;
        int CD;
        int recorder;
        double TV_price;
        double VCR_price;
        double controller_price;
        double CD_price;
        double recorder_price;
        double tax;
        {
            TV_price = 400.00;
            VCR_price = 220.00;
            controller_price = 35.20;
            CD_price = 300.00;
            recorder_price = 150.00;
            tax = .0825;

            Scanner in = new Scanner(System.in);
            {
                System.out.printf("How many TV's were sold? ");
                TVs = in.nextInt();

                System.out.printf("How many VCR's were sold? ");
                VCRs = in.nextInt();

                System.out.printf("How many remote controller's were sold? ");
                controller = in.nextInt();

                System.out.printf("How many CD players were sold? ");
                CD = in.nextInt();

                System.out.printf("How many Tape Recorder's were sold? ");
                recorder = in.nextInt();

                System.out.printf("QTY\tDESCRIPTION\tUNIT PRICE\tTOTAL PRICE\n");
                System.out.printf("%d", TVs + "\tTelevision\t%f", TV_price
                        + "\t" + tax * TV_price + "%f", TV_price);
            }
        }
    }
}
错误消息:

Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.String
    at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4011)
    at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2725)
    at java.util.Formatter$FormatSpecifier.print(Formatter.java:2677)
    at java.util.Formatter.format(Formatter.java:2449)
    at java.util.Formatter.format(Formatter.java:2383)
    at java.lang.String.format(String.java:2781)
    at total_cost.main(total_cost.java:37)

您应该决定是使用
printf()
还是
println()
,这似乎更适合您:

System.out.println(3 + "\tTelevision\t" + TV_price + "\t" + tax * TV_price + " " + TV_price);
使用
printf()

System.out.printf("%d number %s string\n", 3, "hi");
System.out.printf("%d\tTelevision\t%.2f\t%.2f,%.2f", TVs, TV_price,tax * TV_price, TV_price);

您应该决定是使用
printf()
还是
println()
,这似乎更适合您:

System.out.println(3 + "\tTelevision\t" + TV_price + "\t" + tax * TV_price + " " + TV_price);
使用
printf()

System.out.printf("%d number %s string\n", 3, "hi");
System.out.printf("%d\tTelevision\t%.2f\t%.2f,%.2f", TVs, TV_price,tax * TV_price, TV_price);

传递的是字符串,而不是整数。应该是这样的:

System.out.printf("%d number %s string\n", 3, "hi");
System.out.printf("%d\tTelevision\t%.2f\t%.2f,%.2f", TVs, TV_price,tax * TV_price, TV_price);

PS:我可以自由地将价格格式化为小数点后2位。

传递的是字符串,而不是整数。应该是这样的:

System.out.printf("%d number %s string\n", 3, "hi");
System.out.printf("%d\tTelevision\t%.2f\t%.2f,%.2f", TVs, TV_price,tax * TV_price, TV_price);

PS:我可以自由地将价格格式设置为小数点后2位。

因为这一行,您会得到这个例外:

System.out.printf(“%d”,TVs+“\tTelevision\t%f”,TV\u price+“\t”+税*TV\u price+%f”,TV\u price)

由于
+
的原因,
TVs+“\tTelevision\t%f”
正在尝试执行算术运算

您应该格式化输出,然后提供值

例如:
System.out.printf(“%d%s”,TVs,“\tTelevision\”)

由于这一行,您将获得此异常:

System.out.printf(“%d”,TVs+“\tTelevision\t%f”,TV\u price+“\t”+税*TV\u price+%f”,TV\u price)

由于
+
的原因,
TVs+“\tTelevision\t%f”
正在尝试执行算术运算

您应该格式化输出,然后提供值

例如:
System.out.printf(“%d%s”,TVs,“\tTelevision\”)

我对java不是特别熟悉,但我知道的几乎所有“打印格式”函数都遵循一种模式,首先是格式字符串,然后是所有参数

像这样

printf("This is a string %d %d %s %f", arg1, arg2, arg3, arg4);

您似乎试图同时执行格式化字符串和普通连接。

我对java不是很熟悉,但我知道的几乎所有“打印格式”函数都遵循一种模式,首先是格式化字符串,然后是所有参数

像这样

printf("This is a string %d %d %s %f", arg1, arg2, arg3, arg4);

您似乎试图同时执行格式化字符串和正常连接。

上次的
printf
调用有一个由单个占位符组成的格式化字符串,即
%d
,但第一个格式化参数是字符串,而不是
%d
所需的数字。请缩进代码。也不要发布您的全部代码,而是创建最小的、可编译的代码示例,以重现您的问题。并添加更多关于问题本身的细节,比如stacktrace。什么?变量TVs被声明为int。,是的,第二个参数是连接到字符串的int,这使它成为字符串。还是这样?现在我不记得了…哈哈-你给int加了一个字符串?那怎么办?如前所述%d接受和int。最后一个
printf
调用有一个由单个占位符组成的格式字符串,即
%d
,但第一个格式参数是字符串,而不是
%d
所需的数字。请缩进您的代码。也不要发布您的全部代码,而是创建最小的、可编译的代码示例,以重现您的问题。并添加更多关于问题本身的细节,比如stacktrace。什么?变量TVs被声明为int。,是的,第二个参数是连接到字符串的int,这使它成为字符串。还是这样?现在我不记得了…哈哈-你给int加了一个字符串?那怎么办?正如前面所说的那样,当我尝试使用System.out.println时,它会说:“PrintStream类型中的println(String)方法不适用于参数(String、String、String、double)”以及“String.out无法解析”。请阅读我键入的内容。或者至少是复制粘贴之类的。将一个且仅一个参数传递给
println()
函数。将所有内容加在一起。当我尝试使用System.out.println时,它会说:“PrintStream类型中的方法println(String)不适用于参数(String、String、String、double)”以及“String.out无法解析”。请阅读我键入的内容。或者至少是复制粘贴之类的。将一个且仅一个参数传递给
println()
函数。把你所有的东西加在一起,那是什么?你的意思是系统输出吗?一定要用大写的“S”。那是什么?你的意思是系统输出吗?请务必使用大写字母“S”。