【问题标题】:I am trying to retrieve the index of a value in array 1 and use that index to find the value to same index in array 2 [closed]我正在尝试检索数组 1 中值的索引并使用该索引来查找数组 2 中相同索引的值 [关闭]
【发布时间】: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()找不到你要找的项目。

标签: c# arrays search


【解决方案1】:

在调用 pos = Array.IndexOf(ra, 12); 时检查 raashiArray 值的长度;由于您的数组长度为 12,因此它可以具有的最后一个索引是 11。放置断点并检查其余部分。

编辑 好吧,我怎么错过了。 Array.IndexOf 查找字符串的索引,但您以 int 格式输入它,因此它无法找到指定的字符串,因此它始终为 1。在“”中指定数字。还要确保两位数是否存储为单个字符串。 例如

string[] temp = new string[]{ "1", "2", "3", "4", "5" };
int a = Array.IndexOf(temp, "3");

【讨论】:

  • 嘿,谢谢哥们.. 我会这样做的
  • 没问题,兄弟。只需检查您传递的数组是否具有指定长度 12。
  • 试过了,但它仍然不会停止给我-1。我也尝试过使用断点和测试用例,但我不知道为什么 -1
  • 请检查编辑
  • 嘿,即使我发现... :D
【解决方案2】:

如果找不到该项目,函数Array.IndexOf() 可能会返回-1。您应该始终检查这种情况并处理错误,可能会打印您正在搜索的项目(并且该项目不存在于数组中)。

【讨论】:

  • 我会尝试将代码缩减一点......数组总是在不同的地方有数字 1-12。这就是我没有采取预防措施的原因。
  • 总是检查返回值。 从不依赖假设。
  • 我试过了,但它仍然不会停止给我-1。我也尝试过使用断点和测试用例,但我不知道为什么 -1
【解决方案3】:

嘿,我自己找到了答案。这是一个非常愚蠢的解决方案。我路过:

Array.IndexOf("My Array",value)

该函数将值视为整数。我的数组是一个字符串数组。我只是把它改成:

Array.IndexOf(MyArray, "value") // Note it now thinks of value as string

而且中提琴它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多