本文共 2984 字,大约阅读时间需要 9 分钟。
Scanner是一个常见的键盘录入的一个类。
Scanner有这么一个构造:
Scanner(InputStream source)
官方文档给出的解释是: 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。反正说了这么多它也就是用来做键盘录入的。
再来看,System类下有一个静态的字段:
public static final InputStream in; 这是一个标准的输入流,对应着键盘录入。基本格式:
hasNextXxx()
判断下一个是否是某种类型的元素,其中Xxx可以是Int,Double等。 如果需要判断是否包含下一个字符串,则可以省略Xxx nextXxx() 获取下一个输入项。Xxx的含义和上个方法中的Xxx相同看起来可能有些生涩难懂,我们看一下下面的例子:
public class Test { public static void main(String[] args) { //创建一个Scanner对象 Scanner sc = new Scanner(System.in); //用该对象调用hasNextInt()方法,判断下一个输入是不是Int类型,返回值为boolean类型 boolean b = sc.hasNextInt(); //键盘录入一个字符串类型的数据 String s = sc.nextLine(); //打印判断结果 System.out.println(b); }} /* 输入: 张三 结果为: false */
由此可见hasNextXxx()方法的作用是判断其下一个输入的数据的数据类型是不是该类型,该方法有返回值且返回值为boolean类型。
我们平常用到最多的还是nextXxx()方法,我们来看如下例子:
public class Test1 { public static void main(String[] args) { //创建一个Scanner对象 Scanner sc = new Scanner(System.in); //提示:请输入一个整数类型的数字 System.out.println("请输入一个整数类型的数字:"); //键盘录入一个Int类型的数据 int s = sc.nextInt(); //打印输入的结果 System.out.println("你输入的数字是:"+s); /* 输出: 请输入一个整数类型的数字: 123 你输入的数字是:123 */ }}
public class Test { public static void main(String[] args) { //创建一个Scanner对象 Scanner sc = new Scanner(System.in); //提示:请输入一个整数类型的数字 System.out.println("请输入一个整数类型的数字:"); //键盘录入一个Int类型的数据 int s = sc.nextInt(); //提示输入一个字符串 System.out.println("请输入一个字符串:"); //键盘录入一个字符串 String str = sc.nextLine(); //打印输入的结果 System.out.println("你输入的数字是:"+s); System.out.println("你输入的字符串是:"+str); }}
/* 输出结果: 请输入一个整数类型的数字: 123 请输入一个字符串: 你输入的数字是:123 你输入的字符串是: */
我们不难发现,当我们先输入数字类型时,按下Enter键,直接略过了输入字符串的步骤。那么是为什么呢?
其实并不是略过了输入字符串的步骤,其实是当你输入完数字时,按下Enter,这个Scanner对象将你按下的Enter键当成字符串给录入进去了。
那么,当我们想避免这个问题时,应该怎么做?其实我们可以再new一个Scanner对象,让它去单独录入字符串,就不会出现这种问题了,代码如下:
public class Test3 { public static void main(String[] args) { //创建一个Scanner对象 Scanner sc = new Scanner(System.in); //提示:请输入一个整数类型的数字 System.out.println("请输入一个整数类型的数字:"); //键盘录入一个Int类型的数据 int s = sc.nextInt(); //重新创建一个新的Scanner对象 Scanner sc2 = new Scanner(System.in); //提示输入一个字符串 System.out.println("请输入一个字符串:"); //键盘录入一个字符串 String str = sc2.nextLine(); //打印输入的结果 System.out.println("你输入的数字是:"+s); System.out.println("你输入的字符串是:"+str); }}
/* 输出: 请输入一个整数类型的数字: 123 请输入一个字符串: 张三 你输入的数字是:123 你输入的字符串是:张三 */
这样我们就避免了这个问题,当然还有一种方法,就是我们将所有数据都用字符串形式录入,录入完成之后,想要什么类型,就转换成什么数据类型,这种方法在这里我就不做过多的说明了。
转载地址:http://ixiwi.baihongyu.com/