2 u013127937 u013127937 于 2014.12.19 22:22 提问

Java Scanner类使用时产生的一个错误,求解

package upper_test;
import java.util.*;
public class Scanner_00 {

int a;
long b;
float c;
String d;
Double e;
public Scanner_00(String x){
Scanner s=new Scanner(x);
a=s.nextInt();
b=s.nextLong();
c=s.nextFloat();
d=s.nextLine();
e=s.nextDouble();
}

public static void main(String[] args) {

    // TODO Auto-generated method stub
    Scanner_00 m=new Scanner_00("1231\n123\n1.23\nccasda\n12333.353\n");

}

}
报错为
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at upper_test.Scanner_00.(Scanner_00.java:17)
at upper_test.Scanner_00.main(Scanner_00.java:24)
求解!反复换过double格式都不行,貌似不是格式问题

5个回答

yangyanggoods
yangyanggoods   2014.12.20 10:42
已采纳

前面说错了。翻了下文档,Sacnner类的nextLine方法是这样的:
public String nextLine()
此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。
对于
"1231\n123\n1.23\nccasda\n12333.353\n"
nextFloat()之后,光标停留在1.23之后,\nccasda之前,因此调用readLine()读到的是一个空字符串
之后readDouble()的时候读到了"ccasda",于是导致异常

yangyanggoods
yangyanggoods 回复u013127937: nextInt不强制要求换行,只要中间有空白字符(空格、换行啥的都行)分隔。读完以后光标就在你读到的那个数字的末尾
3 年多之前 回复
u013127937
u013127937 谢谢啦
3 年多之前 回复
u013127937
u013127937 也就是说那些nextInt,nextFloat是自动寻找该类型的下一行,读完后光标在该行末尾咯?
3 年多之前 回复
caozhy
caozhy   Ds   Rxr 2014.12.20 04:43

你用的是什么开发环境
运行这里
http://www.yiibai.com/java/util/scanner_nextdouble.html
的测试代码正常么?建议你用eclipse

u013127937
u013127937 我是eclipse,谢谢帮助
3 年多之前 回复
qq_24658227
qq_24658227   2014.12.20 07:50

?建议你用eclipse

yangyanggoods
yangyanggoods   2014.12.20 10:25

错误在17行,17行是d=s.nextLine();吧?
目测你用的是window,windows下换行符应该是\r\n

yangyanggoods
yangyanggoods 试了下发现\r\n和\n都被认为是合法的换行符,不是这个问题
3 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.01.03 07:12

应该就是\r\n的问题

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!