Scanner类中nextInt()和nextLine()一起使用时出现的问题

问题引出

当我们在编写Java程序时,想要录入一个int型的数值,并在其下方录入一个字符串类型的值。

import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        // Scanner类中的nextInt()方法和nextLine()方法连用时所出现的问题
        Scanner sc = new Scanner(System.in) ;
        System.out.print("请输入一个人数字:");
        int num = sc.nextInt();

        System.out.print("请输入一个字符串:");
        String str = sc.nextLine();

        System.out.println("num = " + num);
        System.out.println("str = " + str);
    }
}

在这里插入图片描述

  • 程序运行后我们在控制台输入了数值1,按下回车键表示输入结束,准备去输入字符串的值,结果程序直接结束了。看输出结果,num = 1 str = 也就是说num和str我们都进行录入了,但是明明没有输入字符串值。

  • 这是因为在我们按下回车键结束数字输入时,由于回车键是\r\n,属于字符串,而下面要录入的也刚好是字符串,系统就默认将\r\n 给了str,而nextLine() 方法解结束符也恰好为回车符,所以结束了字符串的输入。得到最后的结果就是num = 1 ; str = "" ;

当然不单单是nextInt()方法会对nextLine()方法有影响,nextByte()、nextDouble()、nextBoolean()等以\r\n作为结束符的Scanner类中的方法都会对其产生影响

解决方案

解决方案一:

将str的录入移到num的上面

import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        // Scanner类中的nextInt()方法和nextLine()方法连用时所出现的问题
        Scanner sc = new Scanner(System.in) ;
        System.out.print("请输入一个字符串:");
        String str = sc.nextLine();

        System.out.print("请输入一个人数字:");
        int num = sc.nextInt();


        System.out.println("num = " + num);
        System.out.println("str = " + str);
    }
}

在这里插入图片描述

解决方案二(建议):

创建不同的Scanner对象录入基本数据类型和字符串类型

import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        // Scanner类中的nextInt()方法和nextLine()方法连用时所出现的问题
        Scanner sc = new Scanner(System.in) ;
        System.out.print("请输入一个人数字:");
        int num = sc.nextInt();

        Scanner sc1 = new Scanner(System.in) ;
        System.out.print("请输入一个字符串:");
        String str = sc1.nextLine();


        System.out.println("num = " + num);
        System.out.println("str = " + str);
    }
}

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值