我的数组没有';似乎不适用于主之外的方法

本文关键字:适用于 不适用 方法 数组 我的 | 更新日期: 2023-09-27 17:59:06

http://pastebin.com/98q57mzj

这与一个文本框数组和一个int数组有关。不知怎的,数组的值似乎在主方法中有效,但在其他方法中无效。

因此,从第34行到第44行,我在main中为数组赋值,然后从第48行到第56行,我使用for循环进行赋值,这样在文本框中键入时只允许使用某些键。然后,在第64行到第70行的另一个方法中,我尝试使用另一个for循环使"字符串值等于0,或者在文本框中获取值,并将该值设置为numbers[]数组中的变量。这似乎不起作用。更改文本框中的值似乎不会更改numbers[]数组的值。然而,如果我把它打出来,它确实有效,就像我在第71行到第94行所做的那样。我不想简单地把它打出来,我想知道为什么这个循环不起作用,这样我就可以了解更多关于数组和方法的信息,这样我就能知道如何在未来解决类似的问题。

为方便起见:

public Form1()
    {
        InitializeComponent();
        inputs[0] = textBox1;
        inputs[1] = textBox2;
        inputs[2] = textBox3;
        inputs[3] = textBox4;
        inputs[4] = textBox5;
        numbers[0] = oneYear;
        numbers[1] = twoYear;
        numbers[2] = threeYear;
        numbers[3] = fourYear;
        numbers[4] = moreYear;
        textBox6.ReadOnly = true;
        for (int i = 0; i <= 4; i++)
        {
            inputs[i].KeyDown += (obj, args) =>
            {
                Keys[] allowedKeys = { Keys.Back, Keys.Next, Keys.Delete, Keys.Left, Keys.Right };
                args.SuppressKeyPress = !allowedKeys.Contains(args.KeyCode) && (args.KeyValue < 48 || args.KeyValue > 57);
            };
            inputs[i].Text = 0.ToString();
        }
    }
    private void autobots()
    {
        try
        {
             //find out why this doesn't work
            for (int i = 0; i <= 4; i++)
            {
                if (inputs[i].Text == "")
                    numbers[i] = 0;
                else
                    numbers[i] = Convert.ToInt32(inputs[i].Text);
            }
            /*if (textBox1.Text == "")
                oneYear = 0;
            else
                oneYear = Convert.ToInt32(textBox1.Text);
            if (textBox2.Text == "")
                twoYear = 0;
            else
                twoYear = Convert.ToInt32(textBox2.Text);
            if (textBox3.Text == "")
                threeYear = 0;
            else
                threeYear = Convert.ToInt32(textBox3.Text);
            if (textBox4.Text == "")
                fourYear = 0;
            else
                fourYear = Convert.ToInt32(textBox4.Text);
            if (textBox5.Text == "")
                moreYear = 0;
            else
                moreYear = Convert.ToInt32(textBox5.Text);*/
            oneTotal = oneYear * 24;
            twoTotal = twoYear * 27;
            threeTotal = threeYear * 30;
            fourTotal = fourYear * 33;
            moreTotal = moreYear * 36;
            total = oneTotal + twoTotal + threeTotal + fourTotal + moreTotal;
            textBox6.Text = total.ToString();
            //label6.Text = ("$") + total.ToString();
        }
        catch
        {
            textBox6.Text = "";
            //label6.Text = "";
        }
    }

我的数组没有';似乎不适用于主之外的方法

您的for循环工作正常。。。。然而,为了阐明为什么这没有按照你需要的方式工作:

 numbers[0] = oneYear;
 numbers[1] = twoYear;
 numbers[2] = threeYear;
 numbers[3] = fourYear;
 numbers[4] = moreYear;

执行此操作时,您将变量的值存储到数组中。。。而不是变量本身。

    for (int i = 0; i <= 4; i++)
    {
         if (inputs[i].Text == "" || inputs[i] == null)
               numbers[i] = 0;
         else

在这里,您可以在数字数组的i位置设置值。到文本框中whats的值。这不会改变变量的值("一年"、"两年"等)

         numbers[i] = Convert.ToInt32(inputs[i].Text);
    }

但这里使用的变量(即"oneYear"、"twoYear")没有有一个新的价值存储在其中。记住,数字[]数组不会直接影响这些变量numbers[]数组(因为它是int类型的数组)只存储这些变量的值,而不是对变量本身的引用。正因为如此,这里的代码无法执行您想要的操作。

    oneTotal = oneYear * 24;
    twoTotal = twoYear * 27;
    threeTotal = threeYear * 30;
    fourTotal = fourYear * 33;
    moreTotal = moreYear * 36;
    total = oneTotal + twoTotal + threeTotal + fourTotal + moreTotal;
    textBox6.Text = total.ToString();

为了使此代码正常工作,您需要使用数字[]数组中的值。像这样:

oneTotal = numbers[0] * 24;
twoTotal = numbers[1] * 27; 
threeTotal = numbers[2] * 30;
etc...

执行此操作时,它将向textBox6输出正确的结果。

我粘贴的代码的第一部分只有在oneYear、twoYear、threeYear、fourYear和moreYear变量具有非零默认值或在到达此代码之前设置了值时才有用,并且因为您使用数字[]数组来存储文本框中的值,所以除非您使用数字[]数组值,否则您将看不到您想要看到的计算。或者,如果你已经下定决心使用一年、两年。。。变量只使用您注释掉的if-else语句,或者放入:

oneYear=数字[0];twoYear=数字[1];等等。

进一步澄清:

我认为您可能在这里有点困惑的原因是,您使用了两种不同类型的数组。一个用于存储文本框的TextBox数组,以及一个用于在文本框中存储值的int数组。TextBox数组正在存储对象。。。或者指向对象的引用(指针)。所以当你说inputs[0]=textBox1;您告诉程序将对textBox1的引用存储在inputs[]数组的第一个元素中,这样您就可以直接操作存储在该数组中的textBoxes,但由于int类型是存储在数组中时的主要数据类型,因此只存储其值,而不存储变量本身。

最后一件事:您需要为您的int变量创建/使用一个包装类,以便按照您尝试的方式执行您尝试执行的操作。