Java学习——常用类的学习之Scanner

Java学习——常用类的学习之Scanner

Scanner是一个常见的键盘录入的一个类。

1.Scanner的构造方法原理

Scanner有这么一个构造:

Scanner(InputStream source)

官方文档给出的解释是: 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。反正说了这么多它也就是用来做键盘录入的。

再来看,System类下有一个静态的字段:
public static final InputStream in;
这是一个标准的输入流,对应着键盘录入。

2.Scanner的使用

  • 基本格式:

    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
            你输入的字符串是:张三
         */

这样我们就避免了这个问题,当然还有一种方法,就是我们将所有数据都用字符串形式录入,录入完成之后,想要什么类型,就转换成什么数据类型,这种方法在这里我就不做过多的说明了。

猜你喜欢

转载自blog.csdn.net/qq_43411550/article/details/89634316