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

小结

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

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

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


相关推荐
神奇小汤圆25 分钟前
金三银四Java面试题及答案汇总(2026持续更新)
后端
颜酱34 分钟前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
神奇小汤圆38 分钟前
加了 limit 1,查询竟然变慢了?
后端
Java水解44 分钟前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端
Java水解1 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
千寻girling1 小时前
一份不可多得的 《 Python 》语言教程
人工智能·后端·python
南风9991 小时前
Claude code安装使用保姆级教程
后端
爱泡脚的鸡腿1 小时前
Node.js 拓展
前端·后端
Coding君1 小时前
每日一Go-30、Go语言进阶-现代化部署:容器化与Docker
go
蚂蚁背大象2 小时前
Rust 所有权系统是为了解决什么问题
后端·rust