Go语言100个实战案例 - 找出切片中的最大值与最小值

实用性案例 | 算法基础 | 初学者友好


一、案例目标

实现一个程序,接收用户输入的一组整数(使用切片存储),然后找出其中的最大值与最小值,并打印结果。


二、 应用场景举例

  • • 数据分析中找出极值(最高温度、最低成绩)
  • • 统计程序中的最小成本和最大利润
  • • 游戏、金融、监控等场景中的实时指标筛选

三、 涉及知识点

知识点 说明
切片 []int 使用 动态数组处理数据序列
for 循环遍历 遍历每个元素
条件判断 if 判断是否是最大或最小值
初始值策略 设置最大/最小初始值是关键

四、🛠 功能需求

    1. 用户输入一组整数(以空格分隔);
    1. 将其转换为整数切片;
    1. 遍历切片,找出最大值与最小值;
    1. 打印原始切片和结果;
    1. 处理非法输入(如非数字字符);

五、 完整示例代码

go 复制代码
package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
)

func main() {
    fmt.Println("请输入一组整数(空格分隔):")
    reader := bufio.NewReader(os.Stdin)
    input, _ := reader.ReadString('\n')

    numbers, err := parseInput(input)
    if err != nil || len(numbers) == 0 {
        fmt.Println("输入有误,请输入一组有效的整数。")
        return
    }

    fmt.Println("输入的切片:", numbers)

    max, min := findMaxMin(numbers)

    fmt.Println("最大值:", max)
    fmt.Println("最小值:", min)
}

// 字符串转整数切片
func parseInput(input string) ([]int, error) {
    fields := strings.Fields(input)
    var result []int
    for _, s := range fields {
        n, err := strconv.Atoi(s)
        if err != nil {
            return nil, err
        }
        result = append(result, n)
    }
    return result, nil
}

// 查找最大值和最小值
func findMaxMin(nums []int) (int, int) {
    max := nums[0]
    min := nums[0]

    for _, n := range nums {
        if n > max {
            max = n
        }
        if n < min {
            min = n
        }
    }
    return max, min
}

六、 示例运行

输入示例:

复制代码
请输入一组整数(空格分隔):
45 3 67 88 12 0 -5 99

输出结果:

css 复制代码
输入的切片: [45 3 67 88 12 0 -5 99]
最大值: 99
最小值: -5

七、 核心解析

    1. 初始化最大/最小值为切片第一个元素
    arduino 复制代码
    max := nums[0]
    min := nums[0]
    1. 遍历并比较每个元素
    python 复制代码
    for _, n := range nums {
        if n > max { max = n }
        if n < min { min = n }
    }
    1. 注意切片为空的情况需提前处理

八、拓展练习建议

  • • 输出最大值和最小值出现的位置(索引);
  • • 同时计算平均值;
  • • 支持浮点数输入(改用 []float64);
  • • 排除负数,只在正数中查找最大值;
  • • 将功能封装为通用工具函数供其他模块调用;

九、常见问题

问题 原因 建议解决
程序 panic 空切片 没有输入或未检查长度 在调用前判断切片是否为空
输入字符串报错 包含非数字字符 提前清洗输入或添加错误提示
最大最小值为0 初始化为0不准确 应初始化为切片第一个值

小结

本案例是最常见、最实用的遍历算法之一,学习要点包括:

  • • 如何从切片中提取信息(极值)
  • • 逻辑清晰的比较流程
  • • 错误处理与用户输入的解析

这些技巧将在你后续写数据处理、排序、图表可视化、甚至机器学习数据预处理时频繁使用。


相关推荐
cj6341181504 小时前
【MySQL】mysqldump使用方法
java·后端
JIngJaneIL4 小时前
停车场管理|停车预约管理|基于Springboot的停车场管理系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·停车场管理系统
雪域迷影5 小时前
Go语言中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·后端·http·golang·get
于小汐在咯8 小时前
深入浅出:增强现实(AR)技术全解析
后端·ar·restful
爱上妖精的尾巴8 小时前
5-27 WPS JS宏数组元素添加删除应用2
后端·restful·wps·js宏
努力的小郑8 小时前
与产品经理的“模糊”对决:Elasticsearch实现MySQL LIKE '%xxx%' 的奇幻之旅
后端·elasticsearch·搜索引擎
一 乐9 小时前
物业管理系统|小区物业管理|基于SprinBoot+vue的小区物业管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
稚辉君.MCA_P8_Java9 小时前
RocketMQ 是什么?它的架构是怎么样的?和 Kafka 又有什么区别?
后端·架构·kafka·kubernetes·rocketmq
yolo_Yang9 小时前
【Spring Boot】Spring Boot解决循环依赖
java·spring boot·后端
wdfk_prog9 小时前
结合QBoot与HPatchLite实现高效差分升级(FOTA)
java·后端·struts