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不准确 应初始化为切片第一个值

小结

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

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

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


相关推荐
北斗落凡尘20 分钟前
LangGraph 入门实战(7)
后端·langchain
uzong35 分钟前
业务新老系统数据迁移-负责人经验总结和复盘
后端
dogstarhuang1 小时前
大模型 API 停服怎么办:用 API 网关实现多模型统一接入与可切换架构
人工智能·后端·架构·大模型·api·数字化转型·ai应用
程序猿DD1 小时前
OctaFuse Gateway 2.5.0:接入 Responses 端点、更易理解的路由配置
后端·agent
2651940511264803 小时前
07-告警引擎与状态机
go·监控
nnerddboy3 小时前
Rust教程04:引用、借用与切片
开发语言·后端·rust
Rain的Java大神之路4 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
weixin_431600445 小时前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
小强库计算机毕业设计5 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
canonical_entropy5 小时前
关于《Mission Driver:Loop Engineering 的一种通用参考实现》的补充说明
后端·agent·ai编程