import java.io.*;
import java.util.*;
import java.math.*;public class ShuXueFunction { public ShuXueFunction() {
}
public void fun(int num)throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
for(int i=0;i<num;i++){
Float.parseFloat(br.readLine());
}
}
public static void main(String[] args) throws Exception{
new ShuXueFunction().fun(5);
}
}
上面这个代码,编译通过,下面是运行的测试结果
当我输入第一次(也就是下面的4)的时候还正常
但输入第二次(3)的时候,就出现下面这个异常
4
3
Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:994)
at java.lang.Float.parseFloat(Float.java:422)
at ShuXueFunction.fun(ShuXueFunction.java:20)
at ShuXueFunction.main(ShuXueFunction.java:24)Process completed.我百思不得其解 这是为什么呢?
经过大量测试,下面的代码竟然可以成功运行!这又是为什么呢?import java.io.*;
import java.util.*;
import java.math.*;public class ShuXueFunction { public ShuXueFunction() {
}
public void fun(int num)throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
for(int i=0;i<num;i++){
System.out.println();
Float.parseFloat(br.readLine());
}
}
public static void main(String[] args) throws Exception{
new ShuXueFunction().fun(5);
}
}
各位高手,我求解!!!
解决方案 »
- 我想把字符串"white"转变成Color值
- 有谁能帮我写个五子棋人工智能部分
- 如何自定义字符串排序规则?
- 数据库中怎么实现定位更新文件操作
- 弹出对话框的位置如何控制?
- 我的AbstractTableModel数据不能清除,请高手们支招啊!搞了好久了!
- 有关用循环结构打印数据的问题
- 天啊!世态炎凉,没法结贴!!!
- 用GZIPInputStream读取URL后,如何再直接读出来?
- java调用Sybase存储过程出错: Stored procedure 'p_test' may be run only in unchained transaction mode
- 求高手帮忙写个经验换算等级的函数
- java 做一个分割大文件
应该是你输入的问题,不小心直接按了回车.另外,流用完,最好关闭。
public void fun(int num)throws Exception{
......
br.close();
}
改成这样br.readLine()。trim();
所以一定要连续输入5行的数字
如果你某一行什么都没输入,直接按回车
readLine()读不到东西返回null
程序里相当于这样
Float.parseFloat(null);
这样就会出错了,这个parseFloat方法的参数不能为null
因为你输完3之后连续打了2下回车照成的!不信你试试.....
你输入一个4 然后输出回车,默认的话只会读取4
然后你输入一个3 连续2个回车,那第二个回车就相当于你 第三次的输入了,系统读取了回车符好进行转化,所以就报 empty String
错误了
如何不按回车连续输出5行?
我这个程序是想这样比方说有一个数组
要求用户,输入第一个数,存进去
然后要求用户再输入一个数,再存进去我觉得我实现的就是这么个功能啊?因为我修改过的那个程序,就是加了System.out.println();之后的这个程序就是我要的效果
正常情况下(即不考虑人品原因),抛出empty string 应该是输入一次4,按了一次回车,然后再按一次回车,出现的。换个运行环境,应该就好了。
LS说的很对readline()函数就是以换行符或回车符作为读取结束标志的API:
public String readLine()
throws IOException读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。 确实如您所说其实这是我昨天写的一段程序里简化出来的,我为什么要简化出来呢?
因为昨天那段代码我测试过后运行正常,可是今天一测试,就出现上面那个问题了我向上天保证,我真的就只按了一次回车我测试了几十次,不能每次都按两次回车吧?看来真的是RP问题了可是问一下,如果代码这么不稳定,那岂不是说,如果在我这运行的正常,到别人那运行的不正常,如果我是个程序员,我该怎么跟老板交代啊我总不能说,老板你来看呀,在我的机器上运行正常吧
对于,我加了一句System.out.println();就运行正常了,有什么看法
你是建议我重新安装一遍jdk吗?
import java.io.*;
import java.util.*;
import java.math.*;public class ShuXueFunction { public ShuXueFunction() {
}
public void fun(int num)throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
for(int i=0;i<num;i++){
Float.parseFloat(br.readLine());
}
}
public static void main(String[] args) throws Exception{
new ShuXueFunction().fun(5);//首先这里已经有数字值,运行时其实是在运行关于5计算。
}
}
可以这样试一下
把程序改成这样
import java.io.*;
import java.util.*;
import java.math.*;public class ShuXueFunction { public ShuXueFunction() {
}
public void fun(int num)throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
for(int i=0;i<num;i++){
String str = br.readLine();
if (str == null) {
System.out.println("null");
} else {
Float.parseFloat(str);
}
}
}
public static void main(String[] args) throws Exception{
new ShuXueFunction().fun(5);
}
}
看一下究竟是什么字符引起的
如果badline后面只打印出空白,那估计是不可见字符
如"\n" "\r"之类的
public class ShuXueFunction { public ShuXueFunction() {
}
public void fun(int num)throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
for(int i=0;i<num;i++){
String str = br.readLine();
try {
Float.parseFloat(str);
} catch (NumberFormatException e) {
System.out.println("badline:" + str);
}
}
}
public static void main(String[] args) throws Exception{
new ShuXueFunction().fun(5);
}
}
输出结果
5
4
badline:
3
2
badline:badline后面什么都没有是空的
1、键盘问题
2、系统中的其它软件引起
3、运行环境问题
4、其它原因是不是前两种情况可以做一个测试
楼主用你的这台电脑
打开个记事本程序
然后输入
5 回车
4 回车
3 回车
2 回车看下记事本中是
5
4
3
2还是
5
43
2
(就是明明是这样输入的,中间确莫名其妙的空了一行)
如果是这样,那估计不是键盘问题,就是系统中有什么软件(比如按键精灵一类的)
你的输入触发了什么脚本,而造成自动输入了一个回车当然,如果没有空这一行
那应该就是这个java运行环境的问题了
不知道楼主是怎么运行程序的?
用的是eclipse一类的工具
还是命令行执行的?
我用的JCreator,我传给朋友用Eclipse运行都没有问题。
看来应该重装JDK,再换个开发工具了啊谢谢您一直以来对此贴的关注!
我还有最后一个疑问,就是如果是运行环境有问题的话
为什么我加上一句System.out.println();就没问题了呢?(参见1楼下面那块代码)
之后会自动换行
会保证你当前的控制台中是一个“干净的行”
而你出错的程序,在你输入了第二个回车之后
可能在的当前输入行中就已经有了一个隐藏的“\n”字符了,这是不可见字符就像我给你改的那个程序,也不会直接抛出异常一样,都是把错误的字符给处理掉了