前面讲了Scannernext() 和nextLine()的基础用法,这个章节是带控制语句的实战练习,顺便带出 nextInt(), nextFloat(), nextDouble()三种方法。

A. Scanner的 nextInt()nextFloat() 用法:

package com.zctou.scanner;

import java.util.Scanner;

public class Demo03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        //接收数据
        int i1 = 0 ;
        float f1 = 0.0F ;
        //整数部分
        System.out.println("请输入一个整数: ");
        if(scanner.hasNextInt()) {
             i1 = scanner.nextInt();
            System.out.println("您输入的: " + i1 + "是一个整数。");
        } else {
            System.out.println("您输入的: " + i1 + "不是一个整数。");
        }
        //浮点数部分
        if(scanner.hasNextFloat()) {
            f1 = scanner.nextFloat();
            System.out.println("您输入的: " + f1 + "是一个小数。");
        } else {
            System.out.println("您输入的: " + f1 + "不是一个小数。");
        }

        scanner.close();
    }
}

输出:

例子一:   
请输入一个整数: 
x //输入了字符
您输入的: 0不是一个整数。
您输入的: 0.0不是一个小数。
---------
    
例子二:   
请输入一个整数: 
  //输入了空格,要求重新输入
//输入了回车,要求重新输入
   1
您输入的: 1是一个整数。
  //输入了空格,要求重新输入 
  1.1
您输入的: 1.1是一个小数。
----
    
例子三:    
请输入一个整数: 
1212 12.1 //输入了2组数字,程序直接跳过了第二次输入请求,并赋值给f1
您输入的: 1212是一个整数。
您输入的: 12.1是一个小数。
-------
    
例子四:   
请输入一个整数: //走的正常流程,按提示输入
1
您输入的: 1是一个整数。
11.2
您输入的: 11.2是一个小数。    
可以看到nextInt()nextFloat() 跟next()是一样的,都会捕获有效字符串,并去除两边的空格。

nextInt()nextFloat() 一样,接收到中间有空格 的字符串(1212 12.1)时,scanner 会所字符串以“ ”(空格)为分隔符,变成一个数组存储数据。

所以例子三中输入了(1212 12.1)时,程序不再要求输入数据。

B. nextDouble() 用法

package com.zctou.scanner;

import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        //我们要输入多个数字,并求和与平均数。每输入一个数字用回车确认,通过输入非数字来结束输入并输出结果;
        Scanner scanner = new Scanner(System.in);
        //和
        double sum = 0 ;
        // 输入数字的个数
        int num = 0 ;

        while(scanner.hasNextDouble()) {
            double x = scanner.nextDouble();
            num = num + 1 ;
            sum = sum + x  ;
        }
        System.out.println(num + "个数求和结果为:" + sum);
        System.out.println(num + "个数求平均值为:" + sum / num);

        scanner.close();
    }
}

输出结果:

10
30
39
x
3个数求和结果为:79.0
3个数求平均值为:26.333333333333332
----------
10 10
10 21
12 x
5个数求和结果为:63.0
5个数求平均值为:12.6   
可以看到 nextDouble()方法跟 nextInt()nextFloat()没区别,也会以" "空格为分割符分开字符串的数字。

唯一区别是就数据类型(数据类型要参考以前的章节),掌握基础就很好把握。

文章目录