Java中next()和nextLine()以及nextInt()的区别

    技术2024-07-11  70

    今天做一个学生信息录入系统的题目是遇到一个小问题,因此记录一下。

    部分代码是这样的:

    String name; int age; char sex;

    Scanner sc=new Scanner(System.in);

    System.out.println("请输入你的名字:"); name=sc.next();

    System.out.println("请输入你的年龄:"); age=sc.nextInt();

    System.out.println("请输入你的性别:"); sex=sc.nextLine().charAt(0);

    运行时一输入性别就报错

    一开始我还以为是sex=sc.nextLine().charAt(0);这句代码错了,核实后排除不是这一句错误

    sex定义的char类型,nextLine读取的是输入的一整行,而char字符型只需要读取一个字符,因此需取输入的字符串的第一个字符,下标为0;

    查询了nextLine相关用法后搞清楚了错误原因:

    next()不会吸取字符前/后的空格/Tab键,只吸取字符,开始吸取字符(字符前后不算)直到遇到空格/Tab键/回车截止吸取;{包括nextInt()、nextDouble()、nextFloat()等}

    nextLine()吸取字符前后的空格/Tab键,回车键截止。

    而在这段代码sex=sc.nextLine().charAt(0);的前面刚好有age=sc.nextInt();

    也就是在输入sex的值时默认赋值为我输入age值之后的回车,因此一直输入错误。

    解决办法:既然我们知道nextLine()吸取字符前后的空格/Tab键,在每一个 next()、nextDouble()  、nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被nextInt()赋值后的回车键滤掉。

    System.out.println("请输入你的年龄:"); age=sc.nextInt();

    System.out.println("请输入你的性别:");

    sc.nextLine();//过滤回车键 sex=sc.nextLine().charAt(0);

    运行正常:

    总结:

    Java中Scanner类中的方法next()和nextLine()都是吸取输入台输入的字符,

    nextLine()不能用在next()等相关方法的后面,否则会导致nextLine()吸收前面的回车键;

    区别:

    next()不会吸取字符前/后的空格/Tab键,只吸取字符,开始吸取字符(字符前后不算)直到遇到空格/Tab键/回车截止吸取;

    nextLine()吸取字符前后的空格/Tab键,回车键截止;

    注意:当使用nexInt()方法时,只能输入int类型的数据,同理nextDouble()、nextFloat()等。

     

    Processed: 0.013, SQL: 11