• 中文
    • English
  • 注册
  • 查看作者
  • nextLine()使用注意事项:会接受\n

    昨天随便写了一个小程序,用到了nextLine(),在这里用nextLine()时遇到的一个小问题,总结一下

    首先,我们要知道next和nextLine()的区别,不知道同学,请点击这里查看

    接着,我们看一下这个小程序:

    按照我的意愿,是想着先提示我输入姓名,再提示我输入性别,然后分别打印我的姓名+性别,但是在我输入姓名后,程序并没有出来让我输入性别的提示,而是直接执行了后面的语句,仿佛默认给我把性别输入了一般,这是怎么回事呢?

    package tv.zhangjia.nextDemo;
    
    import java.util.Scanner;
    
    public class Test {
    	public static void main(String[] args) {
    		String str2 = "男";
    		Scanner input = new Scanner(System.in);
    		System.out.print("请输入你的姓名:");
    		String str = input.next();
    		
    		System.out.print("请输入你的性别:");
    		str2 = input.nextLine();
    		System.out.println(str + "的性别是" + str2);
    
    	}
    }
    
    输出:
    请输入你的姓名:
    输出:张甲
    输出:
    请输入你的性别:张甲的性别是//这里还没等我输入性别,直接执行下一句代码,打印输出了

    我们可以看到,在刚开始的时候,我们给str2赋予了初值为“男”,但是当我们输入姓名后,却直接把剩下的语句都执行了,而且最后输出的性别为空,这说明,str2的值在程序的执行过程中,是被改变了的,其实原因很简单:

    nextLine()会接收‘\n’换行符(虽然不会显示),和next()等一起使用的时候会接收到上一个输入的换行符。也就是说,当我们在输入姓名为“张甲”的时候,“张甲”被保存在str中,而我们输入张甲回车的换行符“\n”被保存在了str2中,所以当我们输入姓名后,一回车,就相当于改变了str2的值为“\n”,所以在最后打印的时候,输出我们的性别是空~

    而且不止是next(),nextDouble() ,nextFloat(), nextInt()等与nextLine()连用时都存在这个问题,那么有什么解决方法呢?其实也很简单,只需要在next()后面,加上nextLine()语句,,将“\n”过滤掉即可。 代码实现如下:

    package tv.zhangjia.students;
    
    import java.util.Scanner;
    
    public class Test {
    	public static void main(String[] args) {
    		String str2 = "男";
    		Scanner input = new Scanner(System.in);
    		System.out.print("请输入你的姓名:");
    		String str = input.next();
    		input.nextLine();
    		System.out.print("请输入你的性别:");
    		str2 = input.nextLine();
    		System.out.println(str + "的性别是" + str2);
    
    	}
    }
    输出:
    请输入你的姓名:
    输入:张甲
    输出:请输入你的性别:
    输入:男
    输出:
    张甲的性别是男

    我们可以看到,程序已经正常运行,打印出了我的性别~

    参考资料:

    路西法

    李响同学

     

  • 0
  • 0
  • 0
  • 2k
  • 请登录之后再进行评论

    登录
    单栏布局 侧栏位置: