簡體   English   中英

循環內的數組外部索引

[英]Index outside array inside loop

我得到一個錯誤索引超出了數組的范圍,我試圖做一些簡單的數學並將其保存在我的列表中。

        List<int> integerList = new List<int>();
        for (int a = 0; a < textBox1.Text.Length; a++)
        {
            for (int b = 8; b > 1 ; b--)
            {
                integerList.Add(int.Parse(textBox1.Text[a * b].ToString())); //this line
            }


        }
        listBox1.DataSource = integerList;

我想要實現的是,用戶必須在文本框中輸入一個7位數的數字,例如4565457,我想將此數字存儲在我的i​​ntegerList中,然后從用戶輸入的開頭開始逐步取出每個數字並乘以從8直到2。

For instance:

4 x 8 
5 x 7
6 x 6
5 x 5
4 x 4
5 x 3
7 x 2

然后我想存儲這些乘法的總和以供以后使用。

它可能是textBox1.Text超出范圍。 嘗試在使用索引器之前添加一個檢查:

if (a*b < textBox1.Length)
    integerList.Add(int.Parse(textBox1.Text[a * b].ToString())); //this line

試試這個(因為你可能想要用b的值來計算你的數字的值):

    List<int> integerList = new List<int>();
    for (int a = 0; a < textBox1.Text.Length; a++)
    {
        for (int b = 8; b > 1 ; b--)
        {
            integerList.Add(int.Parse(textBox1.Text[a].ToString()) * b); //this line
        }


    }
    listBox1.DataSource = integerList;

索引a * b超出了TextBox內容的范圍。 您必須設置安全措施,以確保不使用超出范圍的索引索引文本框的字符串內容

抱歉沒時間閱讀已編輯的問題。 根據新的描述,如果用戶輸入4565457你想要將該字符串中的每個字符從位置0乘以最后一位(在本例中為6 )與8 - position相乘。 繼環單for循環會做的伎倆。

List<int> integerList = new List<int>();
var l = textBox1.Text.Length;
for (int a = 0, b = 8; a < l && b > 1; a++, b--)
{
    integerList.Add((Convert.ToInt16(textBox1.Text[a]) * b)); //this line
}
listBox1.DataSource = integerList;

在循環結束時, listBox1將包含以下值:

416
371
324
265
208
159
110

嘗試這個:

 
 
 
 
  
  
  List<int> integerList = new List<int>(); var l = textBox1.Text.Length; for (int a = 0; a < l; a++) { for (int b = 8; b > 1 && (a*b) < l ; b--) { integerList.Add(int.Parse(textBox1.Text[a * b].ToString())); //this line } } listBox1.DataSource = integerList;
 
 
  

a * b越過文本框中的文本長度,因此添加 && (a*b) > l將使其保持控制。

這行textBox1.Text[a * b]可能是問題的根源。 沒有邊界檢查,並且a * b可能評估為大於textBox1的最終索引的整數。 我沒有一個很好的解決方案,因為我真的不明白你想要做什么......內部for循環中的表達式通常沒有多大意義。

您可以簡單地檢查a * b是否小於textBox1.Text.Length以防止異常,但這可能不會使代碼執行您實際想要的操作。

暫無
暫無

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

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