java书中有一题不是太懂!编译没错误,但就是执行时出现了错误,求高手指教!

题目:
2.编写程序,从键盘上输入一个double型的华氏温度,然后将其转换为摄氏温度输出。转换公式如下:摄氏度=(5/9)*(华氏度-32)
源程序:
import java.util.Scanner;
public class temperature {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.printf("请输入华氏温度:");
double x=sc.nextDouble();
double y=(5.0/9)*(x-32);
System.out.printf("摄氏温度:%.2lf\n",y);
}
}
出现的错误是这样的:
--------------------Configuration: <Default>--------------------
请输入华氏温度:41
Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = 'l'
at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2646)
at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2675)
at java.util.Formatter.parse(Formatter.java:2528)
at java.util.Formatter.format(Formatter.java:2469)
at java.io.PrintStream.format(PrintStream.java:970)
at java.io.PrintStream.printf(PrintStream.java:871)
at temperature.main(temperature.java:8)

Process completed.
请问这是哪里错了呢?谢谢啊!!!

第1个回答  2013-09-21

你的代码是不是和C语言混淆了啊,呵呵。正确的代码如下:

package com.test;

import java.math.BigDecimal;
import java.util.Scanner;

/**
 * @作者 王建明
 * @创建日期 Sep 21, 2013
 * @创建时间 10:57:38 AM
 * @版本号 V 1.0
 */
public class MainTestTwo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入华氏温度:");
double x = sc.nextDouble();
double y = (5.0 / 9) * (x - 32);
System.out.println("摄氏温度:" + numberFormat(y));
}

/**
 * @param val
 * @return
 * @作者 王建明
 * @创建日期 Sep 21, 2013
 * @创建时间 11:03:12 AM
 * @描述 —— 四舍五入保留两位小数
 */
public static double numberFormat(double val) {
BigDecimal b = new BigDecimal(val);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return f1;
}
}

第2个回答  2013-09-21
输出格式有问题,%.2lf,java虚拟机不识别“l”是什么格式。你换成%.2f,即可以看到问题解决了。追问

另外还有一种输出格式是System.out.printf("摄氏温度="+y);
这两种方法有什么区别呢?那种方法用的多呢???解释一下好吗!

追答

如果需要格式化输出,可以使用你的写法。
基于平时的工作,我用的最多的基本都是不需要格式化的:System.out.println(),至于哪种写法用的多,其实还是要看你从事什么样的行业,做哪方面的开发,不能一概而论吧。
只是个人觉得大部分情况下是不需要格式化的,如果要格式化,一般我会先格式化好以后(例如四舍五入),然后再打印,保证显示的结果就是我最后要处理的结果,而不是实际是一个结果,显示又是另一个。

第3个回答  2013-09-21
//这里格式化输出多了一个l
System.out.printf("摄氏温度:%.2f\n",y);

追问

另外还有一种输出格式是System.out.printf("摄氏温度="+y);
这两种方法有什么区别呢?那种方法用的多呢???解释一下好吗!

追答System.out.printf("摄氏温度:%.2f\n",y);

这一种是对输出结果进行格式化了,这里的.2f意思就是保留小数点后2位小数

System.out.printf("摄氏温度="+y);

这一种对结果没做格式化,计算出来什么样子就输出什么样子。


两种一般都用吧,根据自己的需求来选择调用的。

本回答被提问者采纳
第4个回答  2013-09-21
是转换问题,对printf(),我也不熟,用println()用的比较多

java事件处理的问题,程序没报错,但是运行就错了。请高手指教
import java.awt.event.*;import javax.swing.*;public class Demo9_3_1 extends JFrame{ JPanel jp1;JButton jb1,jb2;public Demo9_3_1(){ jp1=new JPanel();jb1=new JButton("黑色");jb2=new JButton("红色");OkListener ol=new OkListener(this);add(jb1,BorderLayout.NORTH);...

java程序在Eclipse中运行没有问题,打包成.jar文件之后运行后路径出现...
1.普通windows文件系统:file:\\D:\\MapModule\\img\\map\\map.jpg \/\/你一定要在这个路径上有文件才能读写 2.jar文件中的文件:jar:file:\\D:\\MapModule.jar!\\img\\map\\map.jpg 区别一眼就看出来了(2中有jar前缀,并且有'!')。给你一个获取输入流的方法:URL url=new URL("jar:file:\\D:\\Ma...

...运行Helloworld程序是显示无效的标志,求高手指教
应该是javac HelloWord.java 是点号,不是逗号,你输入的是逗号。

...io.IOException:不知道这是什么意思!请高手指教!!
运行时的IO异常么,输入输出的时候出现了错误,围绕这块慢慢排查,找到了你会发现很有成就感的 findDomainByName这个方法好像参数无效 在看看Test_ApplicationManager1是不是写错了什么

你上次在百度问的问题:java然后能编译运行,但是在cmd里也能编译却不能...
图片看到的是运行失败的地方。应该显示编译失败的地方,别人才能帮你看是哪的错。

JAVA错误 这是什么错误 求大神指教
StringIndexOutOfBoundsException是越界异常,看你代码应该是 String action = url.substring(url.lastIndexOf("\/"),url.lastIndexOf("."));出错;url.lastIndexOf("\/")和url.lastIndexOf(".")有可能会返回-1的

java 反编译中出现的问题,请高手虾米指教:
The class file version is 50.0 <only 45.3 and 46.0 are supported 对呀这句话不就说得很明白了吗, 你的class是50.0 而jad只支持45.3 到 46.0

java编译时为何说else不带有if?求高手指教。就剩这一个错误了。
他不是说这行else不带if。是说你上一行else if(n==2 && maze[i-1][j]==3);{maze[i][j] &=0xe;genmaze(i-1,j); }中间多了个;所以系统以为 if(n==1 && maze[i][j+1]==3){ maze[i][j] &=0xd;genmaze(i,j+1);}else if(n==2 && maze[i-1][j]==3);if{ m...

...都可以,就是不能修改,点击修改出现错误,求指教
空指针就是你传给他的参数处理类中没接收到

java中遇到-xlint:unchecked,如何使用?求高手指教!
用jdk5编译以前1.4的代码时候,经常会出现如下信息 java 代码 使用了未经检查或不安全的操作。 注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。 其实这是javac的提示信息,解决办法也很简单,在javac后边加上 -Xlint:unchecked 就可以. 对应ant来说,需要增加一个内嵌参数 compilerarg ...

相似回答