Scanner类的特点 hasNextInt() :判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx
nextInt(): 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同,默认情况下,Scanner使用空格,回车等作为分隔符
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //创建键盘录入对象
if(sc.hasNextInt()) { //判断键盘录入的是否是int类型的数据
int i = sc.nextInt(); //键盘录入的数据存储在i中
System.out.println(i);
}else {
System.out.println("输入的类型错误");
}
}
bug问题:先用nextInt()接收int类型,再用nextLine()接收字符串的时候,会导致nextLine() 直接把回车接收到了, nextLine 不能继续接收字符串了
1)先获取一个数值后,再创建一个新的键盘录入对象获取字符串。
2)把所有的数据都先按照字符串获取,然后要什么,你就对应的转换为什么。(后面讲)
出现问题代码:
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int i = sc.nextInt(); //先用nextInt()接收int类型
System.out.println("请输入第二个字符串:");
String line2 = sc.nextLine(); //再用nextLine()接收字符串
System.out.println("i = " + i + ", line2 = " + line2); //line2不等着你去接收 就执行了这句输出语句
为什么出现问题呢?
nextInt()是键盘录入整数的方法,当我们录入10的时候
其实在键盘上录入的是10和\r\n,nextInt()方法只获取10就结束了
nextLine()是键盘录入字符串的方法,可以接收任意类型,但是他凭什么能获取一行呢?
通过\r\n,只要遇到\r\n就证明一行结束
解决:①
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int i = sc.nextInt(); //先用nextInt()接收int类型
System.out.println("请输入第二个字符串:");
Scanner sc2 = new Scanner(System.in); //再创建一个新的键盘录入对象
String line = sc2.nextLine(); //再用新的键盘录入对象的nextLine()接收字符串
System.out.println(i);
System.out.println(line);
②(下面这种方案 明天就讲 我先写在这里 不懂的话 明天学了就明白了)
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
String lin = sc2.nextLine(); //先用nextLine()接收一个数字型的字符串 比如 "100"
int i = Integer.parseInt(lin);
System.out.println("请输入第二个字符串:");
String line = sc2.nextLine(); //再用新的键盘录入对象的nextLine()接收字符串
System.out.println(i);
System.out.println(line);
|