【发布时间】:2015-07-30 20:54:15
【问题描述】:
下面是检查 2 个数组的函数。在数组 1 中搜索一个值,并使用该值的索引来检索数组 2 中相同索引处的值
public void raashiNumberRelations(string rashiValue, string[] raashiArray)
{
char[] MobileNum = textBox3.Text.ToCharArray();
Array.Reverse(MobileNum);
int rv = Convert.ToInt32(rashiValue);
string[] ra = raashiArray;
int pos = 0;
string combo1 = "";
string combo2 = "";
string combo3 = "";
if (rv == 1)
{
pos = Array.IndexOf(ra, 5);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 8);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 11);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
if (rv == 2)
{
pos = Array.IndexOf(ra, 4);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 7);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 10);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
if (rv == 3)
{
pos = Array.IndexOf(ra, 3);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 9);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 12);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
if (rv == 4)
{
pos = Array.IndexOf(ra, 8);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 11);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 2);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
if (rv == 5)
{
pos = Array.IndexOf(ra, 7);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 10);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 1);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
if (rv == 6)
{
pos = Array.IndexOf(ra, 9);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 12);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 3);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
if (rv == 7)
{
pos = Array.IndexOf(ra, 11);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 2);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 5);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
if (rv == 8)
{
pos = Array.IndexOf(ra, 10);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 1);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 4);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
if (rv == 9)
{
pos = Array.IndexOf(ra, 12);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 3);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 6);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
if (rv == 10)
{
pos = Array.IndexOf(ra, 2);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 5);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 8);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
if (rv == 11)
{
pos = Array.IndexOf(ra, 1);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 4);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 7);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
if (rv == 12)
{
pos = Array.IndexOf(ra, 3);
combo1 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 6);
combo2 = MobileNum[0].ToString() + MobileNum[pos].ToString();
pos = Array.IndexOf(ra, 9);
combo3 = MobileNum[0].ToString() + MobileNum[pos].ToString();
rashiCombination(combo1, combo2, combo3);
}
}
private void button4_Click(object sender, EventArgs e)
{
string[] mobileNum = new string[12];
string[] raashiRow = new string[12];
addSrNo();
addMobileNumber();
findCombinations();
string zs = calcIndianRaashi(textBox1.Text);
string[] data = new string[12];
string[] CalVal = new string[12];
int temp = 0;
for (int i = ZodiacIndian; i <= 12; i++)
{
data[temp] = i.ToString();
CalVal[temp] = GetCalculatedVal(i).ToString();
temp++;
}
for (int i = 1; i < ZodiacIndian; i++)
{
data[temp] = i.ToString();
CalVal[temp] = GetCalculatedVal(i).ToString();
temp++;
}
Array.Reverse(data);
Array.Reverse(CalVal);
for (int j = 0; j < 12; j++)
{
dataGridView1.Rows[1].Cells[j].Value = data[j];
dataGridView1.Rows.Add();
}
for (int j = 0; j < 12; j++)
{
dataGridView1.Rows[2].Cells[j].Value = CalVal[j];
dataGridView1.Rows.Add();
}
for (int i = 0; i < c.Length; i++)
{
mobileNum[i] = c[i].ToString();
}
raashiRow = data;
raashiNumberRelations(data[11], raashiRow);
displayGrahaEffects(mobileNum);
}
输出给出的错误数组超出范围,因为 pos 的值由于某种原因始终保持 -1
【问题讨论】:
-
这肯定是太多的代码来证明这个问题。将其简化为一个最小的工作示例(预计 7 行代码)
-
你使用调试器了吗?设置断点?单步执行您的代码?检查数组长度?将变量值与预期值进行比较?您需要 2 分钟才能找到所有错误。
-
重复代码太多。通过提取私有成员函数进行重构。
-
我试过调试器,但 pos 的值保持 -1
-
pos被初始化为0它变成-1,因为Array.IndexOf()找不到你要找的项目。