将值插入数组中的特定元素

时间:2010-06-25 18:36:50

标签: c#

我无法弄清楚为什么用户输入的值没有被插入到范围数组中的正确元素中。有人可以对此有所了解吗?我是个菜鸟。

谢谢!

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();
    }

问题是,无论用户输入什么值,增量都不会转到'range'数组中的元素。我一定会感激一些帮助。

谢谢!

3 个答案:

答案 0 :(得分: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]加1。


第二个循环也存在显示m0内容的问题。您的代码使用数组中的值作为索引,这显然是错误的。只需直接输出值:

range

答案 1 :(得分:1)

您的foreach循环格式不正确。您正在尝试将i变量视为数组的索引,而实际上是数组中的值< / em>的。当您编写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]++; 
} 

答案 2 :(得分:0)

在将原始值添加到数组元素后,您将增加变量。所以当你这样做时:     int m0 = 0;     range [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!