Scanner输入数字后面再输入整数型为啥输入不进去

今天有一个学弟问我一个问题,说Scanner抽风了输入不进去字符串。具体问题先上代码:

        Scanner s = new Scanner(System.in);
        System.out.print("Please enter your age: ");
        int age = s.nextInt();
        System.out.println("You are " + age + " years old!");
        System.out.println("Do you like being so old?");
        String answer = s.nextLine();
        System.out.println("answer" + answer);

在代码运行之后,输入age以后并不让输入answer直接执行完程序。结果是:

Please enter your age: 18
You are 18 years old!
Do you like being so old?
answer:

Process finished with exit code 0

造成这样的根本结果是,Scanner对象将我们输入的回车按键默认为字符串输入,因此系统判定用户输入完了数字,也输入完了字符串,程序应该结束。
修改这种BUG有以下三种方法:

第一种,将字符串输入和整型输入调换位置,先输入字符串,再输入整型。

        Scanner s = new Scanner(System.in);
        String answer = s.nextLine();
        System.out.print("Please enter your age: ");
        int age = s.nextInt();
        System.out.println("You are " + age + " years old!");
        System.out.println("Do you like being so old?");
        System.out.println("answer:"+answer);

如代码所示,但是这种方法有可能导致代码逻辑问题;

第二种方法,全部输入字符串类型,再将字符串类型强转成整型:

        Scanner s = new Scanner(System.in);
        System.out.print("Please enter your age: ");
        String age = s.nextLine();
        int ageTwo= Integer.parseInt(age);
        System.out.println("You are " + ageTwo + " years old!");
        System.out.println("Do you like being so old?");
        String answer = s.nextLine();
        System.out.println("answer:"+answer);

这种代码解决了语序问题,但是输入字符串类型不能保证输入数据的安全性。

第三种方法:在输入整型后面再添加一个无效的字符串输入事件。

        Scanner s = new Scanner(System.in);
        System.out.print("Please enter your age: ");
        int age = s.nextInt();        //接收你输入的整形数字
        s.nextLine();   //接收你输入的回车(他把回车当成一个字符串了)
        System.out.println("You are " + age + " years old!");
        System.out.println("Do you like being so old?");
        String answer = s.nextLine();   //接收你最后输入的字符串
        System.out.println("answer"+answer);

强推第三种方法。

使用java这么久,自己从来没注意过这些知识,java的一些底层细节还是特别重要的。希望刚开始学习java的小伙伴可以多思考多研究。数据结构和底层对以后的开发帮助很大。

你可能感兴趣的