WinForm C#数组操作:无数据终止遍历、修正长度显示与位置计数
问题修复方案
你当前代码的问题来自三个逻辑疏漏:
- 初始化了固定长度10的数组后,直接取数组的声明长度作为已存学生数,所以弹窗永远显示10
- 遍历循环的终止条件设为数组总长度,会把没存数据的空位数组元素也遍历出来
- 直接使用数组从0开始的索引作为展示序号,没有做+1偏移
- 额外存在变量名拼写错误:遍历处写的
lista和你定义的数组名list不一致,会触发编译错误
具体修改逻辑
- 用你已经定义的
pos变量作为实际已录入学生的计数:每存一个学生pos就加1,这个值就是真实的学生总数,弹窗直接展示这个值即可 - 循环遍历的终止条件改为
i < pos,只会遍历已经存入有效姓名的数组位置,不会访问空元素 - 展示位置序号时使用
i + 1替代原有的i,即可实现从1开始计数的需求 - 补充基础边界判断:防止数组存满后继续录入触发索引越界,同时过滤空姓名输入、无数据时点击查询的异常场景
修正后完整代码
string[] list = new string[10]; int pos = 0; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // 数组存满时拦截录入,防止索引越界 if (pos >= list.Length) { MessageBox.Show("最多支持录入10名学生信息"); textBox1.Clear(); return; } string studentName = textBox1.Text.Trim(); if (string.IsNullOrWhiteSpace(studentName)) { MessageBox.Show("请输入有效的学生姓名"); return; } list[pos] = studentName; pos++; textBox1.Clear(); } private void button2_Click(object sender, EventArgs e) { // 展示真实录入的学生数量 MessageBox.Show($"已录入学生总数:{pos}"); if (pos == 0) { MessageBox.Show("暂无已录入的学生信息"); return; } // 仅遍历已存入有效数据的数组位 for (int i = 0; i < pos; i++) { string message = $"The student {list[i]} has the position {i + 1}"; MessageBox.Show(message); } }
内容的提问来源于stack exchange,提问作者Erasmo Juarez
相关产品推荐
相关产品推荐

