实用性案例 | 算法基础 | 初学者友好
一、案例目标
实现一个程序,接收用户输入的一组整数(使用切片存储),然后找出其中的最大值与最小值,并打印结果。
二、 应用场景举例
- • 数据分析中找出极值(最高温度、最低成绩)
- • 统计程序中的最小成本和最大利润
- • 游戏、金融、监控等场景中的实时指标筛选
三、 涉及知识点
知识点 | 说明 |
---|---|
切片 []int 使用 |
动态数组处理数据序列 |
for 循环遍历 |
遍历每个元素 |
条件判断 if |
判断是否是最大或最小值 |
初始值策略 | 设置最大/最小初始值是关键 |
四、🛠 功能需求
-
- 用户输入一组整数(以空格分隔);
-
- 将其转换为整数切片;
-
- 遍历切片,找出最大值与最小值;
-
- 打印原始切片和结果;
-
- 处理非法输入(如非数字字符);
五、 完整示例代码
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
七、 核心解析
-
- 初始化最大/最小值为切片第一个元素:
arduinomax := nums[0] min := nums[0]
-
- 遍历并比较每个元素:
pythonfor _, n := range nums { if n > max { max = n } if n < min { min = n } }
-
- 注意切片为空的情况需提前处理。
八、拓展练习建议
- • 输出最大值和最小值出现的位置(索引);
- • 同时计算平均值;
- • 支持浮点数输入(改用
[]float64
); - • 排除负数,只在正数中查找最大值;
- • 将功能封装为通用工具函数供其他模块调用;
九、常见问题
问题 | 原因 | 建议解决 |
---|---|---|
程序 panic 空切片 | 没有输入或未检查长度 | 在调用前判断切片是否为空 |
输入字符串报错 | 包含非数字字符 | 提前清洗输入或添加错误提示 |
最大最小值为0 | 初始化为0不准确 | 应初始化为切片第一个值 |
小结
本案例是最常见、最实用的遍历算法之一,学习要点包括:
- • 如何从切片中提取信息(极值)
- • 逻辑清晰的比较流程
- • 错误处理与用户输入的解析
这些技巧将在你后续写数据处理、排序、图表可视化、甚至机器学习数据预处理时频繁使用。