2010-06-25 119 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!