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()的话,会输出之前的错误的值求大神帮助 展开
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()的话,会输出之前的错误的值求大神帮助 展开
展开全部
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的指针后面没有元素了,因为你本来就只输入了一个字符串,之后后移后,就没有了,因此会阻塞,等待你再次输入。
Scanner会将你输入的分割成三个元素,以next开头的方法会读取当前元素,并将指针后移。
nextFloat方法是一个阻塞方法,当你调用nextFloat时,程序会等待你从键盘输入,当你输入按下回车后,Scanner会开始对你的输入进行处理,处理的方式是按照空格进行分割。你第一次输入了一个字符串,此时Scanner中就只有一个元素,调用nextFloat时,如果转型失败就会进入catch语句块,此时Scanner中原来输入的错误字符串仍然存在,且指针仍然指着这个错误的串:
当没有next那句话时,程序会执行catch中的输出语句,并再次执行try中的语句,由于刚刚nextFloat失败,但是Scanner的指针仍然指着刚刚输入的错误串,也就是说Scanner中还有元素没有读完,因此会再次执行nextFloat,进而形成死循环;
当有next时,进入catch后,next会将Scanner的指针后移,在回到try中的nextFloat时,该方法发现Scanner的指针后面没有元素了,因为你本来就只输入了一个字符串,之后后移后,就没有了,因此会阻塞,等待你再次输入。
展开全部
把你的代码修改了一下看看,你加个断点跟一下就可以。
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自己后台启用多线程实现的方法。
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 · 知道合伙人数码行家
关注
展开全部
死循环为什么最后catch要加个sc.next();:
这个是java固定语法,记住就行了
这个是java固定语法,记住就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询