java scanner用法 求助

importjava.util.Scanner;publicclasstest{publicstaticvoidmain(Stringargs[]){Scannersc=... import java.util.Scanner;
public class test {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
float f = 0;
while (true) {
try {
System.out.println("请输入第一个数字:");
f = sc.nextFloat();
break;
} catch (Exception ex) {
System.out.print("对不起,您的输入不正确");
sc.next();//!!!就是这个 } }
}
} 声明:我是菜鸟 求大神帮助 分不多了 不好意思如果输入的不是float就会发生异常 catch捕获但是下次循环式 sc.nextFloat()还是原来的错误值 导致死循环为什么最后catch要加个sc.next();就可以避免那种情况否则就会造成死循环 也就是好像是sc里的值得不到释放那种 因为我在catch里如果输出sc.next()的话,会输出之前的错误的值求大神帮助
展开
 我来答
whut_yirenwei
2012-08-06 · 超过34用户采纳过TA的回答
知道答主
回答量:80
采纳率:100%
帮助的人:85万
展开全部
Scanner是一个扫描器,他会对你的输入进行扫描,当你输入后,会按照空格进行分割。比如你输入的是1 2 3
Scanner会将你输入的分割成三个元素,以next开头的方法会读取当前元素,并将指针后移。
nextFloat方法是一个阻塞方法,当你调用nextFloat时,程序会等待你从键盘输入,当你输入按下回车后,Scanner会开始对你的输入进行处理,处理的方式是按照空格进行分割。你第一次输入了一个字符串,此时Scanner中就只有一个元素,调用nextFloat时,如果转型失败就会进入catch语句块,此时Scanner中原来输入的错误字符串仍然存在,且指针仍然指着这个错误的串:
当没有next那句话时,程序会执行catch中的输出语句,并再次执行try中的语句,由于刚刚nextFloat失败,但是Scanner的指针仍然指着刚刚输入的错误串,也就是说Scanner中还有元素没有读完,因此会再次执行nextFloat,进而形成死循环;
当有next时,进入catch后,next会将Scanner的指针后移,在回到try中的nextFloat时,该方法发现Scanner的指针后面没有元素了,因为你本来就只输入了一个字符串,之后后移后,就没有了,因此会阻塞,等待你再次输入。
jialulai
2012-08-07
知道答主
回答量:3
采纳率:0%
帮助的人:5.6万
展开全部
把你的代码修改了一下看看,你加个断点跟一下就可以。
while (true) {
try {
System.out.println("请输入第一个数字:");
f = sc.nextFloat();// 关键点1
break;
} catch (Exception ex) {
System.out.print("对不起,您的输入不正确");
String next = sc.next();// 关键点2
System.out.println(next);
}
}

sc.nextFloat()将输入信息的下一个标记扫描为一个 float。如果下一个标记不能转换为有效的 float 值,则此方法将抛出 InputMismatchException。通过上述API的使用说明可以看出,java需要去找sc.next()这个方法(下一个标记扫描为一个 float),如果没有找到这个方法就是一直抛出InputMismatchException这个异常,再加上的while(true)条件结果就是死循环了。(注意看上述代码中的关键点1和2)
你可以在你的程序上加断点看一下,这个的实现是java自己后台启用多线程实现的方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
美图赏
2012-08-06 · 知道合伙人数码行家
美图赏
知道合伙人数码行家
采纳数:2638 获赞数:24292
毕业于河南大学电子信息科学与技术专业,学士学位,擅长计算机网络技术。

向TA提问 私信TA
展开全部
死循环为什么最后catch要加个sc.next();:
这个是java固定语法,记住就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
琉璃碎琉恋殇
高粉答主

2020-05-11 · 每个回答都超有意思的
知道答主
回答量:9万
采纳率:3%
帮助的人:4431万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式