2010-06-25 10 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 변수를 제거하고, 단지 배열 요소 증가 :의 당신이 반복적으로 매출액 250 (그래서 첫 번째 if 분기를 입력한다고 가정 해 봅시다

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

이 설명해 주셔서 감사합니다. – Batsu

+0

@ 바츠 : 천만에. – LBushkin

3

을 일치 할 것이다).

당신이 "250"를 처음 입력하기 전에 : 처음 후에

range[0] == 0 
     m0 == 0 

: 두 번째 시간 후

range[0] == 0 
     m0 == 1 

:

range[0] == 1 
     m0 == 2 

당신이 볼 수 있듯이을의 할당 값은 range[0]입니다.

놀랍지 만, range[0]은 '지연'으로 증가합니다. 그 이유는 변수 m0을 하나씩 증가 시키지만 m0의 원래 값을 반환하는 후위 연산자 - 연산자 ++의 의미입니다!

당신이 원하는 것은 :

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

또는

range[0]++; 

즉 하나 range[0]를 증가. m0은 필요하지 않습니다.


두 번째 루프에 range의 내용을 표시하는 데 문제가 있습니다. 코드는 배열의 값을 인덱스로 사용합니다. 이는 분명히 잘못되었습니다. 그냥 출력을 직접 값 :

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

오, 정말 고마워요. 증가분을 표현하는 방법을 모르지만 더 좋은 방법이 있다고 생각했습니다. 다시 한 번 감사드립니다! – Batsu

0

당신은 배열 요소에 원래 값을 추가 한 후 변수를 증가하고 있습니다. 그래서 이것을 할 때 : int m0 ​​= 0; 범위 [0] = m0 ++; 이 같은 의미 동일

:

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

을 그래서으로 변경 :

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

모두에 대해이 작업을 수행 :로 본질적으로 동일

range[0] = ++m0; 

하는 귀하의 배열 요소 및 변수, 그리고 당신은 잘해야합니다.

HTH!