今天有一个学弟问我一个问题,说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的小伙伴可以多思考多研究。数据结构和底层对以后的开发帮助很大。