C#生成斐波那契序列无法添加到ListBox项的问题咨询
代码问题及修正方案
以下是你代码中存在的问题,以及修复后的可运行代码:
现存问题
- 数组长度初始化错误:你将数组长度设为了
lbox.Items.Count,初始状态下列表为空,数组长度为0,for循环完全不会执行,自然无法添加项。正确应该用用户输入的序列长度quantity作为数组长度。 - 合法性校验顺序错误:你先执行了
txtseq.Text转int的操作,再判断文本框是否为空,若文本框为空第一步转类型就会抛出异常,应该先判断非空再做类型转换。 - 循环内逻辑错误:你把
array[0]和array[1]的赋值放到了循环体内部,每次循环都会被重置;且array[i] = array[i--] + array[i]中使用i--会修改循环变量i的值,会引发死循环或索引越界。 - 项添加逻辑错误:每次循环都把0、1和当前位的值拼接添加,输出内容不符合斐波那契序列的展示要求。
修复后代码
private void btn_Click(object sender, EventArgs e) { // 先校验输入非空 if (txtseq.Text.Length <= 0) { MessageBox.Show("Insert something first"); return; } int quantity = Convert.ToInt32(txtseq.Text); // 清空列表原有项 lbox.Items.Clear(); if (quantity <= 0) return; int[] array = new int[quantity]; // 前两位单独赋值,放在循环外 array[0] = 0; lbox.Items.Add(array[0].ToString()); if (quantity == 1) return; array[1] = 1; lbox.Items.Add(array[1].ToString()); if (quantity == 2) return; for (int i = 2; i < quantity; i++) { // 用i-1和i-2取前两位,不修改循环变量i array[i] = array[i - 1] + array[i - 2]; lbox.Items.Add(array[i].ToString()); } }
内容的提问来源于stack exchange,提问作者NitroSage
相关产品推荐
相关产品推荐

