【问题标题】:I don't know what's wrong with one of my variable.[Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = 'm']我不知道我的一个变量有什么问题。[线程“main”java.util.UnknownFormatConversionException 中的异常:Conversion = 'm']
【发布时间】:2014-09-10 16:24:50
【问题描述】:
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");
    }
} 

调试:

名称 LE01 输入 12 并按 enter12 线程“主”java.util.UnknownFormatConversionException 中的异常:Conversion = 'm' 在 java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2691) 在 java.util.Formatter$FormatSpecifier.(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 秒)

【问题讨论】:

  • 你为什么要做 n = kbd.nextInt()?你不应该做 kbd.nextDouble() 吗?

标签: java


【解决方案1】:

您误解了带有% 符号的格式字符串中的内容。变量名不在格式字符串中,它们作为单独的参数传递给printf。格式说明符表示传入的变量的类型,例如%d 用于整数,%f 用于浮点数,%s 用于字符串文本。

试试例如:

System.out.printf("%f", m);

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

【讨论】:

    【解决方案2】:

    您的格式陈述不正确。

    // Should print "q=2.0"
    double q = Math.sqrt(4.0);
    System.out.printf ("q=%g", q);
    

    这是 Javadoc:

    http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html

    【讨论】:

      【解决方案3】:

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

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

      当我运行您的代码(进行上述更改)并输入 12 时,我得到

      m = 3.000000
      n = 12.000000
      p = 36.000000
      q = 6.000000
      

      【讨论】:

        【解决方案4】:
        System.out.printf("m = %f", m);
        System.out.printf("n = %f", n);
        System.out.printf("p = %f", p);
        System.out.printf("q = %f", q);
        

        我能够将 (Int) 更改为 (Doubles) 并将 ("%m") 更改为 ("m = %f", m)。 它运作良好。感谢大家提供有用的提示

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-04
          • 2020-08-23
          • 1970-01-01
          相关资源
          最近更新 更多