2010-06-25 190 views
0

我很難弄清楚爲什麼用戶輸入的值未插入到範圍數組中的正確元素中。有人可以對此有所瞭解嗎?我是小白。將值插入數組中的特定元素

謝謝!

static void Main(string[] args) 
    { 
     int m0 = 0; 
     int m1 = 0; 
     int m2 = 0; 
     int m3 = 0; 
     int m4 = 0; 
     int m5 = 0; 
     int m6 = 0; 
     int m7 = 0; 
     int m8 = 0; 
     int m9 = 0; 


     Console.WriteLine("How many entries today?"); 

     int entries = Convert.ToInt32(Console.ReadLine()); 

     int[] array = new int[entries]; 



     int[] range = new int[9]; 

     foreach (int i in array) 
     { 
      Console.WriteLine("Enter your sales amount"); 
      int sales = Convert.ToInt32(Console.ReadLine()); 

      if (sales >= 200 && sales <= 299) 
      { 
       range[0] = m0++; 
      } 
      if (sales >= 300 && sales <= 399) 
      { 
       range[1] = m1++; 
      } 
      if (sales >= 400 && sales <= 499) 
      { 
       range[2] = m2++; 
      } 
      if (sales >= 500 && sales <= 599) 
      { 
       range[3] = m3++; 
      } 
      if (sales >= 600 && sales <= 699) 
      { 
       range[4] = m4++; 
      } 
      if (sales >= 700 && sales <= 799) 
      { 
       range[5] = m5++; 
      } 
      if (sales >= 800 && sales <= 899) 
      { 
       range[6] = m6++; 
      } 
      if (sales >= 900 && sales <= 999) 
      { 
       range[7] = m7++; 
      } 
      if (sales >= 1000 && sales <= 9999) 
      { 
       range[8] = m8++; 
      } 

     } 


     foreach (int i in range) 
     { 
      Console.WriteLine(range[i]); 
     } 

     Console.Read(); 
    } 

事情是,無論用戶輸入什麼值,增量都不會進入'範圍'數組中的元素。我一定會感謝一些幫助。

謝謝!

回答

1

您的foreach循環格式不正確。您正試圖將i變量作爲數組中的索引,實際上是數組中的值。當您編寫foreach(x in c)時,x是集合中的實際值,而不是集合中的索引。

它應該是:

foreach (int i in range) 
{ 
    Console.WriteLine(i); 
} 

,或者(作爲常規環):

for(int i = 0; i < range.Length; i++) 
{ 
    Console.WriteLine(range[i]); 
} 

你的第二個問題是,您使用的是遞增運算符,在一個單獨的值在您分配給range[]陣列。這不符合您的期望。無論是切換到使用預增量(++m0),或得到完全擺脫mXX變量,只是遞增數組元素:

if (sales >= 200 && sales <= 299) 
{ 
    range[0]++; 
} 
if (sales >= 300 && sales <= 399) 
{ 
    range[1]++; 
} 
+0

非常感謝您向我解釋這一點。 – Batsu 2010-06-25 18:50:46

+0

@Batsu:不客氣。 – LBushkin 2010-06-25 19:34:55

3

比方說,你重複輸入銷售金額250(所以第一個if分支會匹配)。

在你進入"250"第一次:

range[0] == 0 
     m0 == 0 

後的第一次:

range[0] == 0 
     m0 == 1 

第二遍:

range[0] == 1 
     m0 == 2 

正如你所看到的,分配值爲range[0]的作品。

令人驚訝的是range[0]增加了「延遲」。原因在於後綴運算符++的語義,它將變量m0加1,但返回原始值m0

你想要的是:

range[0] = range[0] + 1; 

range[0]++; 

即遞增一range[0]m0是不需要的。


還有與你的第二個循環來顯示的range內容的問題。你的代碼使用數組中的值作爲索引,這顯然是錯誤的。只需直接輸出值:

foreach (int i in range) 
{ 
    Console.WriteLine(i); 
} 
+0

非常感謝。我不知道如何表達增量,但有一種感覺有更好的方法。再次感謝! – Batsu 2010-06-25 18:49:56

0

將原始值添加到數組元素後,您將增加變量。所以當你這樣做時: int m0 = 0; 範圍[0] = m0 ++;

在語義上與此相同:

int m0 = 0; 
range[0] = m0; // range[0] == 0!!! 
m0 = m0 + 1; 

所以改成這樣:

range[0] = ++m0; 

基本上是一樣的:

int m0 = 0; 
m0 = m0 + 1; 
range[0] = m0; // range[0] == 1 

這樣做對所有你的數組元素和變量,你應該沒問題。

HTH!