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面向对象编程文章查看此处

相关文章
|
21天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
15天前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
13天前
|
缓存 负载均衡 Dubbo
Dubbo技术深度解析及其在Java中的实战应用
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
39 6
|
15天前
|
Java
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
23 7
|
16天前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
58 1
|
23天前
|
存储 负载均衡 Java
Jetty技术深度解析及其在Java中的实战应用
【9月更文挑战第3天】Jetty,作为一款开源的、轻量级、高性能的Java Web服务器和Servlet容器,自1995年问世以来,凭借其卓越的性能、灵活的配置和丰富的扩展功能,在Java Web应用开发中占据了举足轻重的地位。本文将详细介绍Jetty的背景、核心功能点以及在Java中的实战应用,帮助开发者更好地理解和利用Jetty构建高效、可靠的Web服务。
32 2
|
6天前
|
Java 数据中心 微服务
Java高级知识:线程池隔离与信号量隔离的实战应用
在Java并发编程中,线程池隔离与信号量隔离是两种常用的资源隔离技术,它们在提高系统稳定性、防止系统过载方面发挥着重要作用。
6 0
|
1月前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
29天前
|
Java 开发者
Java中的多线程编程基础与实战
【9月更文挑战第6天】本文将通过深入浅出的方式,带领读者了解并掌握Java中的多线程编程。我们将从基础概念出发,逐步深入到代码实践,最后探讨多线程在实际应用中的优势和注意事项。无论你是初学者还是有一定经验的开发者,这篇文章都能让你对Java多线程有更全面的认识。
22 1
下一篇
无影云桌面