簡體   English   中英

我的數組似乎在main之外的方法中不起作用?

[英]My array doesn't seem to work in methods outside the main?

http://pastebin.com/98q57mzj

這與文本框數組和int數組有關。 不知何故,數組的值似乎可以在main方法中使用,而不能在其他方法中使用。

因此,從第34行到第44行,我將值分配給主數組,然后從第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值。 這不會更改變量的值(“ oneYear”,“ twoYear”等)。

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

但是這里您使用的是變量(即“ oneYear”,“ twoYear”),這些變量中沒有存儲新值。 請記住,numbers []數組不會直接影響這些變量,而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();

為了使此代碼正常工作,您需要使用numbers []數組中的值。 像這樣:

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

當您執行此操作時,它將正確的結果輸出到textBox6。

我粘貼的代碼的第一部分僅在oneYear,twoYear,ThreeYear,fourYear,moreYear變量具有非零默認值或在使用此代碼之前設置了值,並且因為您正在使用數字[]時有用。 ]數組來存儲文本框中的值,除非您使用numbers []數組值,否則您將看不到要查看的計算。 或者,如果您對使用oneYear,twoYear ...變量一無所知,則僅使用您已注釋掉的if-else語句,或者放:

oneYear =數字[0]; twoYear =數字[1]; 等等..

進一步說明:

我認為您可能在這里有點困惑的原因是因為您使用的是兩種不同類型的數組。 一個TextBox數組用於存儲文本框,一個int數組用於存儲文本框中的值。 TextBox數組正在存儲對象...或對象的引用(指針)。 所以當你說輸入[0] = textBox1; 您告訴程序將對textBox1的引用存儲在inputs []數組的第一個元素中,從而使您可以直接操作存儲在此數組中的textBox,但是因為int類型是存儲在數組中的主要數據類型僅存儲其值,而不存儲變量本身。

最后一件事:您需要為int變量創建/使用一個包裝器類,以便按照嘗試執行的方式進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM