【发布时间】:2018-06-22 16:05:48
【问题描述】:
我想创建一个方法,它搜索数组中的最大值并用它们创建另一个数组。然后,所有这些值都应该打印在richTextBox 中(因为之后我会将它们与文本绑定,我想将它们与每个值一起打印)。
我的方法的代码:
private void selectPattern() {
int[] tab = new int[12];
int max = 0;
int k = 0;
int[] j = new int[12];
for (int l = 0; l < 12; l++) {
j[l] = 0;
}
// Patterns
tab[0] = 3;
tab[1] = 2;
tab[2] = 5;
tab[3] = 7;
tab[4] = 1;
tab[5] = 4;
tab[6] = 4;
tab[7] = 11;
tab[8] = 3;
tab[9] = 11;
tab[10] = 11;
tab[11] = 3;
// Counting
for (int i = 0; i < 12; i++) {
if (tab[i] >= max) {
max = tab[i];
j[k] = i;
k++;
for (k = 0; k < 12; k++) {
if (j[k] != 0) {
richTextBox1.Text = j[k].ToString();
richTextBox1.Text = Environment.NewLine;
}
}
}
}
}
但它只是第一次工作,现在我得到了:
System.IndexOutOfRangeException:索引超出了数组的范围。 在 Form1.cs:line 59 中的 WindowsFormsApp2.Form1.selectPattern() 处
第 59 行是这样的:
j[k] = i;
我在方法的开头为k 设置了 0 值,所以我假设每次调用此方法时都应该重写该索引。谁能解释一下,为什么它不起作用?
感谢您的帮助
@编辑 变量名称更具描述性的代码
private void selectPattern()
{
int[] valueTab = new int[12];
int maxValue = 0;
int indexIndex = 0;
int[] indexTab = new int[12];
//Filling indexTab with zeroes
for (int zeroIndex = 0; zeroIndex < 12; zeroIndex++)
{
indexTab[zeroIndex] = 0;
}
//Patterns
valueTab[0] = 3;
valueTab[1] = 2;
valueTab[2] = 5;
valueTab[3] = 7;
valueTab[4] = 1;
valueTab[5] = 4;
valueTab[6] = 4;
valueTab[7] = 11;
valueTab[8] = 3;
valueTab[9] = 11;
valueTab[10] = 11;
valueTab[11] = 3;
//Counting
for (int valueIndex = 0; valueIndex < 12; valueIndex++)
{
if (valueTab[valueIndex] >= maxValue)
{
maxValue = valueTab[valueIndex];
indexTab[indexIndex] = valueIndex;
indexIndex++;
for (indexIndex = 0; indexIndex < 12; indexIndex++)
{
if (indexTab[indexIndex] != 0)
{
richTextBox1.Text = indexTab[indexIndex].ToString();
richTextBox1.Text = Environment.NewLine;
}
else
{
richTextBox1.Text = "." + Environment.NewLine;
}
}
indexIndex = 0;
}
}
}
【问题讨论】:
-
这段代码演示了为变量命名以表明其用途的价值
-
k的用途是什么?为什么在外循环和内循环的计数器中都使用它?
标签: c# arrays exception indexing