IO实战篇:数字大小比较 | 带你学《Java语言高级特性》之七十二

简介: 本节将带着读者开发实际案例,实现对输入的数字大小的比较功能,并求出所输数字的最大值和最小值。

上一篇:transient:将属性脱离序列化 | 带你学《Java语言高级特性》之七十一

本节将带着读者开发实际案例,实现对输入的数字大小的比较功能,并求出所输数字的最大值和最小值。

【本节目标】
通过阅读本节内容,你将复习Scanner的相关知识,结合工厂模式,编写数字处理相关接口并完成实现,最终实现求出输入的三个数字的最大值和最小值的功能。

数字大小比较

编写java程序,输入3个整数,并求出3个整数的最大值和最小值。

如果要想进行数字的输入处理,那么应该保证输入错误的时候可以重新输入,那么为了可以达到重用的设计,应该准备一个单独的输入数据类。

1、 定义一个输入工具类

public class InputUtil {
    private InputUtil(){}
    /**
     * 实现键盘接收数字的操作
     * @param prompt 提示信息
     * @return 一个可以使用的数字
     */
    public static int getInt(String prompt){
        int num = 0;
        boolean flag = true; 
        while (flag){
            Scanner input = new Scanner(System.in);
            System.out.print(prompt);  //打印提示信息
            if(input.hasNext("\\d+")){
                num = Integer.parseInt(input.next("\\d+"));  
                flag = false ;
            }else{
                System.out.println("输入的内容不是数字!");
            }
        }
        return num ;
    }
}

或者使用BufferedReader 来定义。

public class InputUtil {
    private InputUtil(){}
    /**
     * 实现键盘接收数字的操作
     * @param prompt 提示信息
     * @return 一个可以使用的数字
     */
    public static int getInt(String prompt){
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        int num = 0;
        boolean flag = true; 
        while (flag){
            System.out.print(prompt);  //打印提示信息
            String str = null;
            try{
                str = buf.readLine();
                if(str.matches("\\d+")){
                     num = Integer.parseInt(str);  
                     flag = false ;
                }else{
                     System.out.println("输入的内容不是数字!");
                }
            }catch(IOException e) {
                System.out.println("输入的内容不是数字!");
            }
        }
        return num ;
    }
}

2、 定义数据的输入处理

public interface INumberService{
    /**
     * 输入数据并返回输入数据的最大值和最小值
     * @param count 表示要输入数据的个数
     * @return  包含有两个内容:第一个是最大值,第二个是最小值
     */
    public int[] stat(int count);
}

3、 定义接口的实现子类

public class NumberServiceImpl implements INumberService{
    @Override
    public int[] stat(int count) {
        int result[] = new int[2];   //定义返回的结果
        int data[] = new int[count];    //开辟一个数组
        for (int x = 0; x < data.length; x++) {   //数字的循环输入
            data[x]=InputUtil.getInt("请输入第""+(x+1)+""个数字:");
        }
        result[0]=data[0];   //最大值
        result[1]=data[0];   //最小值
        for(int x = 0 ;x < data.length; x ++) {
           if(data[x] > result[0]) {
               result[0] = data[x];
           }
           if(data[x] < result[1]) {
               result[1] = data[x];
           }
        }
        return result;
    }
}

4、 定义工厂类获取接口对象

public class Factory{
    private Factory(){}
    public static INumberService getInstance(){
        return new NumberServiceImpl();
    }
}  

5、 编写测试程序类

public class IOCaseDemo{
    public static void main(String[] args) {
        INumberService numberService = Factory.getInstance();
        int result [] = numberService.stat(5);
        System.out.println("最大值:"+ result[0]+ "、最小值:"+ result[1] );
    }
}

image.png
执行结果

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:IO实战篇:文件保存 | 带你学《Java语言高级特性》之七十三
更多Java面向对象编程文章查看此处

相关文章
|
7天前
|
Java
阅览室(Java语言)
阅览室(Java语言)
10 2
|
5天前
|
自然语言处理 Java API
Java 8的Stream API和Optional类:概念与实战应用
【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
27 7
|
7天前
|
Java
PTA帅到没朋友(Java语言)+测试点
PTA帅到没朋友(Java语言)+测试点
12 1
|
7天前
|
机器学习/深度学习 算法 Java
全排列(分治)(Java语言 +全排列模板)
全排列(分治)(Java语言 +全排列模板)
12 2
|
7天前
|
Java
阶乘末尾0的个数(Java语言+思路优化)
阶乘末尾0的个数(Java语言+思路优化)
8 1
|
7天前
|
Java C++
社交集群(pta) (并查集) Java语言
社交集群(pta) (并查集) Java语言
13 3
|
7天前
|
存储 Java
ZigZagging on a Tree二叉树蛇形层次遍历(Java语言)
ZigZagging on a Tree二叉树蛇形层次遍历(Java语言)
11 1
|
7天前
|
Java
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
13 4
|
1天前
|
开发框架 Java 大数据
Java语言的诞生与发展
Java语言的诞生与发展
|
2天前
|
Java 程序员 API
Java 8 Lambda 表达式和Stream API:概念、优势和实战应用
【5月更文挑战第20天】在Java 8中,Lambda 表达式和Stream API是两个非常强大的特性,它们显著改变了Java程序员处理数据和编写代码的方式。本篇技术文章将深入探讨这些特性的概念、优点,并提供实战示例,帮助理解如何有效地利用这些工具来编写更简洁、更高效的代码。
19 6