Java的in.nextInt()和in.nextLine()方法的具体内涵

本人也是刚开始学习java语言,在学习的过程中,老师让我们做一个模拟学生学籍管理系统的小程序。因为刚开始,做的是比较简单的,用switch语句做界面,然后配合Scanner 接收输入的数字进行跳转,完成各类操作。因为跳转时输入的是数字,而跳转后的操作要输入字符串,比如:“选择1添加学生信息…输入添加学生的姓名…”这类的操作在测试的时候总是无法输入字符串


就像这个样子,先用nextInt()再用nextLine()不会有接收字符串的效果。然后去网上查了一些资料,看了一些论坛,了解了一些其中的原理,整理一下。

首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格啊,回车啊什么的都算做是空白符。

nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是,nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉。

了解了这两个方法特性和区别,就知道了上边的代码究竟是怎么回事,以及知道了解决的方法。像是上边的代码nextInt()方法之后在缓冲区中留下了“\r”,然后nextLine()方法再去缓冲区找数据的时候首先看到了“\r”,然后就把这个“\r”扫描接收进来,并在缓冲区内清除掉。其实,nextLine()方法是执行过的,并没有不执行。

知道了原理,那么解决方法就比较简单了:

1:可以再nextInt()方法后面多加一句nextLine()方法专门用来取出缓冲区中留下的空白符,像这样:


像上边的第10行代码,就是专门用来取出缓冲区中残留的空白符的。

2:可以只用nextLine()方法,然后通过Integer类中的parseInt()方法解析成int数据。因为nextLine()方法会自动清理掉后边的空白符,这种方法就不会产生最开始那种错误了,


本文链接:https://blog.csdn.net/wjy1090233191/article/details/42080029
作者:wjy1090233191
来源:CSDN
原文链接
转载文章,仅供学习

  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实验7 循环结构程序的设计(二) 程序填空,不要改变与输入输出有关的语句。 1. 求1-1/2+1/3-1/4+…… 输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 读入1 个正整数 n(n<=100),计算并输出1-1/2+1/3-1/4+……的前n项和(四舍五入保留小数4位)。 例:括号是说明 输入 2 (repeat=2) 10 3 输出 0.6456 0.8333 import java.util.Scanner; public class Test40004 { public static void main(String[] args) { int ri, repeat; int i, n, flag; float sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); /*--------------------*/ sum=0; flag=1; for(i=1;i<=n;i++) { sum+=flag*1.0f/i; flag=-flag; } System.out.println((long)(sum*10000+0.5)/10000.); } } } 2. 求1-1/3+1/5-1/7+…… 输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 读入1 个正实数eps,计算并输出1-1/3+1/5-1/7+……,直到最后一项的绝对值小于eps为 止(要求每一项的绝对值均大于等于eps,并以float类型输出数据)。 例:括号是说明 输入 2 (repeat=2) 1E-4 0.1 输出 0.7853 0.8349 import java.util.Scanner; public class Test40006 { public static void main(String[] args) { int ri, repeat; int temp, flag; double eps, item, sum; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ eps=in.nextDouble(); /*--------------------*/ item=1; sum=0; temp=flag=1; while(Math.abs(item)>=eps){ sum+=item; flag=-flag; temp+=2; item=flag*1.0/temp; } System.out.println((int)(sum*10000+0.5)/10000.); } } } 3. 求2/1+3/2+5/3+8/5+... 输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 输入一个正整数n,输出 2/1+3/2+5/3+8/5 +...的前n项之和,保留4位小数(不足4位时,不必用0填满4位)。(该序列从第2项起, 每一项的分子是前一项分子与分母的和,分母是前一项的分子) 例:括号是说明 输入 3 (repeat=3) 1 5 20 输出 2.0 (第1项是2.0) 8.3917 (前5项的和是8.3917) 32.6603 (前20项的和是32.6603) import java.util.Scanner; public class Test40011 { public static void main(String[] args) { int ri, repeat; int i,n; float a,b,s,t; Scanner in=new Scanner(System.in); repeat=in.nextInt(); for(ri=1; ri<=repeat; ri++){ n=in.nextInt(); /*--------------------*/ a=1; //分母 b=2; //分子 s=0; for(i=1;i<=n;i++) { s+=b/a; t=a; a=b; //分母是前一项的分子 b=t+b; //分子是前一项分子与分母的和 } System.out.println((int)(s*10000+.5)/10000.); } } } 4. 求a+aa+aaa+aa…a 输入一个正整数repeat (0<repeat<10),做repeat次下列运算: 输入2个正整数a和n, 求a+aa+aaa+aa…a(n个a)之和。
实验5分支结构程序的设计 程序填空,不要改变与输入输出有关的语句。 一、显示两级成绩 输入一个正整数repeat <0<repeat<10>,做repeat次下列运算: 输入一个学生的数学成绩,如果它低于60,输出"Fail",否则,输出"Pass"。 输出使用System.out.println<"Pass">;及System.out.println<"Fail">; 例:括号是说明 输入 2 <repeat=2> 60 59 输出 Pass Fail import java.util.Scanner; public class Test30001{ public static void main<String[] args>{ int ri, repeat; int mark; Scanner in=new Scanner<System.in>; repeat=in.nextInt<>; for<ri=1; ri<=repeat; ri++>{ mark=in.nextInt<>; /*------------------*/ if <mark<60> System.out.println<"Fail">; else System.out.println<"Pass">; } } } 二、找最小值 输入一个正整数repeat <0<repeat<10>,做repeat次下列运算: 输入四个整数,输出其中的最小值。 例:括号是说明 输入 3 <repeat=3> 12 6 1 90 10 40 30 20 -1 -3 -4 -5 输出 min is 1 <12 6 1 90 中的最小值是1> min is 10 <10 40 30 20 中的最小值是10> min is -5 <-1 -3 -4 -5中的最小值是-5> import java.util.Scanner; public class Test30002 { public static void main<String[] args>{ int ri, repeat; int a, b, c, d, min; Scanner in=new Scanner<System.in>; repeat=in.nextInt<>; for<ri=1; ri<=repeat; ri++>{ a=in.nextInt<>; b=in.nextInt<>; c=in.nextInt<>; d=in.nextInt<>; /*------------------*/ min=a; if<min>b> min=b; if<min>c> min=c; if<min>d> min=d; System.out.println<"min is "+min>; } } } 三、求三角形的面积和周长 输入一个正整数repeat <0<repeat<10>,做repeat次下列运算: 输入三角形的三条边a, b, c,如果能构成一个三角形,输出面积area和周长perimeter;否则,输出"These sides do not correspond to a valid triangle"。 在一个三角形中,任意两边之和大于第三边。 三角形的面积计算公式: area*area = s<s-a><s-b><s-c> 其中:s = <a+b+c>/2 输出代码: System.out.println<"area="+<int><area*100+0.5>/100.+";perimeter="+<int><peri meter*100+0.5>/100.>; System.out.println<"These sides do not correspond to a valid triangle">; 例:括号是说明 输入 2 <repeat=2> 5 5 3 1 1 4 输出 area=7.15;perimeter=13.0 These sides do not correspond to a valid triangle import java.util.Scanner; public class Test30003 { public static void main<String[] args>{ int ri, repeat; float a, b, c, area, perimeter, s; Scanner in=new Scanner<System.in>; repeat=in.nextInt<>; for<ri=1; ri<=repeat; ri++>{ a=in.nextFloat<>; b=in.nextFloat<>; c=in.nextFloat<>; /*-----------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值