我的数组没有';似乎不适用于主之外的方法
本文关键字:适用于 不适用 方法 数组 我的 | 更新日期: 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变量创建/使用一个包装类,以便按照您尝试的方式执行您尝试执行的操作。