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

小结

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

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

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


相关推荐
转转技术团队1 小时前
转转上门隐私号系统的演进
java·后端
【本人】1 小时前
Django基础(二)———URL与映射
后端·python·django
城里有一颗星星1 小时前
6.删除-demo
数据库·go
Humbunklung2 小时前
Rust 模块系统:控制作用域与私有性
开发语言·后端·rust
WanderInk2 小时前
依赖对齐不再“失联”:破解 feign/BaseBuilder 错误实战
java·后端·架构
LaoZhangAI4 小时前
GPT-4o mini API限制完全指南:令牌配额、访问限制及优化策略【2025最新】
前端·后端
LaoZhangAI4 小时前
FLUX.1 API图像尺寸设置全指南:优化生成效果与成本
前端·后端
Kookoos4 小时前
ABP VNext + EF Core 二级缓存:提升查询性能
后端·.net·二级缓存·ef core·abp vnext
月初,4 小时前
SpringBoot集成Minio存储文件,开发图片上传等接口
java·spring boot·后端
KubeSphere4 小时前
全面升级!WizTelemetry 可观测平台 2.0 深度解析:打造云原生时代的智能可观测平台
后端