我不知道';我不知道是什么';我的一个变量有问题。[线程中的异常";main";java.util.UnknownFormatConversionException:Conversion=&&x27;m&&x27;]

我不知道';我不知道是什么';我的一个变量有问题。[线程中的异常";main";java.util.UnknownFormatConversionException:Conversion=&&x27;m&&x27;],java,Java,调试: 名称LE01 键入12并按Enter键12 线程“main”java.util.UnknownFormatConversionException中的异常:Conversion='m' 在java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2691) 位于java.util.Formatter$FormattSpecifier。(Formatter.java:2720) 位于java.util.Formatter.pa

调试:

名称LE01 键入12并按Enter键12 线程“main”java.util.UnknownFormatConversionException中的异常:Conversion='m' 在java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2691) 位于java.util.Formatter$FormattSpecifier。(Formatter.java:2720) 位于java.util.Formatter.parse(Formatter.java:2560) 位于java.util.Formatter.format(Formatter.java:2501) 位于java.io.PrintStream.format(PrintStream.java:970) 位于java.io.PrintStream.printf(PrintStream.java:871) 位于LABEX03.main(LABEX03.java:16) Java结果:1
生成成功(总时间:6秒)

您误解了带
%
符号的格式字符串中应该包含的内容。变量名不以格式字符串的形式出现,而是作为单独的参数传递给
printf
。格式说明符指示传入变量的类型,例如,整数为
%d
,浮点数为
%f
,字符串文本为
%s

试试看,例如:

import java.util.Scanner;

public class LABEX03
{
    public static void main(String[] args)
    { 
            System.out.println("Name LE01");
            Scanner kbd = new Scanner(System.in);
            double m = 3;
            double n = 0;
            System.out.print("type 12 and Press enter");
            n = kbd.nextInt();
            double p = (double)m * (double)n;
            double q = 0;
            q = (double)Math.sqrt(p);
            System.out.printf("%m");
            System.out.printf("%n");
            System.out.printf("%p");
            System.out.printf("%q");
    }
} 

有关进一步的参考,请参阅,其中提供了有关如何格式化字符串和传入变量的更多详细信息。

您的格式化语句不正确

System.out.printf("%f", m);
以下是Javadoc:


您似乎对的参数数量和顺序感到困惑。我很确定你想要这样的东西

// Should print "q=2.0"
double q = Math.sqrt(4.0);
System.out.printf ("q=%g", q);
当我运行您的代码(进行上述更改)并输入12时,我得到

System.out.printf("m = %f%n", m);
System.out.printf("n = %f%n", n);
System.out.printf("p = %f%n", p);
System.out.printf("q = %f%n", q);
我可以将(Int)改为(double),并将(“%m”)改为(“m=%f”,m)。
它工作得很好。感谢大家提供的有用提示

您为什么要使用n=kbd.nextInt()?你不应该做kbd.nextDouble()吗?
m = 3.000000
n = 12.000000
p = 36.000000
q = 6.000000
System.out.printf("m = %f", m);
System.out.printf("n = %f", n);
System.out.printf("p = %f", p);
System.out.printf("q = %f", q);