2012-06-25 50 views
-5

messagebox顯示數組元素1至9中的每一個,但不顯示第10和第11個元素? 爲什麼我不能達到第10和11元 我tryied與富文本框做太多,但我不能再看到隱形陣列元素

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    int i; 
    int[] array1 = new array1[11]; 
    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     try 
     { 
      array1[i] = int.Parse(textBox1.Text) % 10; 
      MessageBox.Show(dizi[i].ToString()); 
     } 
     catch 
     { 
      if (i > 11) 
      { 
       //MessageBox.Show("it can't be big than 11"); 
      } 
     } 
     i++; 
    } 
} 
+2

什麼是'dizi'? – Charleh

+2

11不存在,因爲數組介於0-10 – tutts

+2

之間我想知道是否拋出了一個異常來向您提供有關錯誤的信息。它肯定會很好,如果你可以看到這個異常,而不是在你的代碼中忽略它... – David

回答

2

i == 10,你會看到該數組的第11要素。這是因爲數組索引以0開頭,所以i0變爲1011或更高的數字會給你一個例外。我建議你在嘗試訪問數組之前檢查它。像這樣:

if (i < 11) {  // or if (i < dizi.Length) 
    try 
    { 
     dizi[i] = int.Parse(textBox1.Text); 
     MessageBox.Show(dizi[i].ToString()); 
     i++; 
    } 
    catch (Exception ex) 
    { 
     // You can still get errors if the text cannot be parsed to an int 
    } 
} 
0

最大值爲int是2147483647,所以如果你打字比任何大數量,int.Parse()會默默的失敗。正如其他人所說,沒有第十一個因素。

+0

C.Evenhuis感謝您的評論...現在好了,但 –

+0

我可以使用哪個變量? –

+0

目前還不清楚你想達到什麼目的。你可以簡單地使用'MessageBox.Show(textBox1.Text);'但是我確定你首先投射到'int'是有原因的。 –

1

是的,你已經得到你的答案,但是是真的要小心變量限制。

Type  Size (in bits)  Range 
-----   --------   ---------- 
sbyte   8    -128 to 127 
byte   8    0 to 255 
short   16    -32768 to 32767 
ushort   16    0 to 65535 
int     32    -2147483648 to 2147483647 
uint   3     0 to 4294967295 
long   64     -9223372036854775808 to 9223372036854775807 
ulong   64    0 to 18446744073709551615 
char   16    0 to 65535 
float   32    7 digits 1.5 x 10-45 to 3.4 x 1038 
Double    64    15-16 digits 5.0 x 10-324 to 1.7 x 10308 
Decimal   128    28-29 decimal places 1.0 x 10-28 to 7.9 x 1028 
+0

感謝它會幫助我。 –

+0

一個字節是87位?哇,那是你有一些瘋狂的CPU架構。 –

+0

另外;這個問題*似乎*與數組原點有關;基於0和基於1的。不太清楚這個答案是如何與這個問題相關的,這讓它很容易被立即接受。 –