日期:2014-05-20  浏览次数:20758 次

使用Scanner的nextInt()进行键盘输入的问题
学java时间不长   碰到一问题   见以下大致代码

......

Scanner   sc   =   new   Scanner(System.in);
do{
        int   a;
        ...   ...
        a=sc.nextInt();
        ...   ...
}while(...);

......

想利用nextInt()从键盘输入一个整数赋值给一整形变量
由于需要重复输入   将此方法调用放到do-while循环中   第一次能正确输入
而再次进入循环碰到此方法时出现异常如下:
Exception   in   thread   "main "   java.util.NoSuchElementException
                at   java.util.Scanner.throwFor(Unknown   Source)
                at   java.util.Scanner.next(Unknown   Source)
                at   java.util.Scanner.nextInt(Unknown   Source)
                at   java.util.Scanner.nextInt(Unknown   Source)
                at   InputSystem.main(InputSystem.java:206)
通过看jdk帮助文档大概知此异常是因为什么枚举中没有更多的元素之类的有关系
不知怎样解决?
而且小弟为用java实现键盘输入一整形数值很迷茫   不知怎样才是最好的解决办法
想起学c时一个scanf就一切搞定   可到了java这感觉不是很容易
上面的方法也是请教别人的   请大家指点一下   在此谢过

------解决方案--------------------
抛出这个NoSuchElementException异常,表示,没有这么多的元素了。
就是,本来这时候不应该再执行的,而你while里居然判断为true,程序还继续执行,
由于没有下一个int了,所以就抛出这个异常。

例如,你输入:1 2 3
本来执行到3时,就没有元素了,而你的while居然还是判断为true,所以,就抛这个异常了。
------解决方案--------------------
刚才代码没写完,就发出去了。在读之前先判断下有没有输入,否则就一直等。

Scanner sc = new Scanner(System.in);
do{
if(sc.hasNext()){
int a;
... ...
a=sc.nextInt();
... ...
}
}while(...);

......