Inserting values into specific elements in an array
I'm having trouble figuring out why the values the user inputs aren't being inserted into the proper element in the range array. Can someone shed some light on this? I'm a noob.
Thanks!
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();
}
The thing is, no matter what values the user enters, the increments aren't going to the elements in the 'range' array. I would definitely appreciate some help.
Thanks!
Let's say you repeatedly enter the sales amount 250
(so the first if
branch would match).
Before you enter "250"
the first time:
range[0] == 0
m0 == 0
After the first time:
range[0] == 0
m0 == 1
After the second time:
range[0] == 1
m0 == 2
As you can see, assigning the value to range[0]
works.
What might be surprising is that range[0]
is incremented with a 'delay'. The reason for this is the semantics of the postfix-operator ++
which increments the variable m0
by one, but returns the original value of m0
!
What you want is:
range[0] = range[0] + 1;
or
range[0]++;
i.e. increment range[0]
by one. m0
is not needed.
There's also a problem with your second loop to display the contents of range
. Your code uses the values in the array as indices, which is clearly wrong. Just output the values directly:
foreach (int i in range)
{
Console.WriteLine(i);
}
Your foreach loop is malformed. You're trying to treat the i
variable as an index into the array, when in fact is is the value in the array. When you write foreach( x in c )
, the x
is the actual value in the collection, not an index into the collection.
It should be:
foreach (int i in range)
{
Console.WriteLine(i);
}
Or, alternatively (as a regular loop):
for( int i = 0; i < range.Length; i++ )
{
Console.WriteLine( range[i] );
}
Your second problem is that you are using the post-increment operator on a separate value in your assignment to the range[]
array. This doesn't behave the way you expect. Either switch to using the pre-increment (++m0
), or get rid of the mXX
variables altogether, and just increment the array elements:
if (sales >= 200 && sales <= 299)
{
range[0]++;
}
if (sales >= 300 && sales <= 399)
{
range[1]++;
}
You're incrementing the variables after adding the original value to the array element. So when you do this: int m0 = 0; range[0] = m0++;
That is semantically the same as this:
int m0 = 0;
range[0] = m0; // range[0] == 0!!!
m0 = m0 + 1;
So change it to this:
range[0] = ++m0;
which is essentially the same as:
int m0 = 0;
m0 = m0 + 1;
range[0] = m0; // range[0] == 1
Do this for all your array elements and variables, and you should be fine.
HTH!
精彩评论