2010-06-25 7 views
0

Je n'arrive pas à comprendre pourquoi les valeurs entrées par l'utilisateur ne sont pas insérées dans l'élément approprié du tableau de plages. Quelqu'un peut-il nous éclairer à ce sujet? Je suis un noob.Insertion de valeurs dans des éléments spécifiques d'un tableau

Merci!

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

La chose est, peu importe quelles sont les valeurs que l'utilisateur entre, les incréments ne vont pas aux éléments du tableau « gamme ». J'apprécierais certainement de l'aide.

Merci!

Répondre

1

Votre boucle foreach est mal formée. Vous essayez de traiter la variable i comme un index dans le tableau, alors que est la valeur dans le tableau. Lorsque vous écrivez foreach(x in c), le x est la valeur réelle dans la collection, pas un index dans la collection.

Il devrait être:

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

Ou encore (comme boucle):

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

Votre deuxième problème est que vous utilisez l'opérateur post-incrément d'une valeur séparée dans votre affectation à la baie range[]. Cela ne se comporte pas comme prévu. Soit passer à l'aide de la pré-incrément (++m0), ou se débarrasser des mXX des variables tout à fait, et l'incrément seulement les éléments du tableau:

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

Merci beaucoup de me l'expliquer. – Batsu

+0

@Batsu: De rien. – LBushkin

3

Disons que vous entrez à plusieurs reprises le montant des ventes 250 (donc la première branche if correspondrait).

Avant d'entrer "250" la première fois:

range[0] == 0 
     m0 == 0 

Après la première fois:

range[0] == 0 
     m0 == 1 

Après la deuxième fois:

range[0] == 1 
     m0 == 2 

Comme vous pouvez le voir, l'attribution de la valeur à range[0] fonctionne. Ce qui peut surprendre, c'est que range[0] est incrémenté avec un 'délai'. La raison de ceci est la sémantique de l'opérateur postfix ++ qui incrémente la variable m0 par un, mais renvoie la valeur d'origine de m0!

Qu'est-ce que vous voulez est:

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

ou

range[0]++; 

dire incrémenter range[0] par un. m0 n'est pas nécessaire.


Il y a aussi un problème avec votre deuxième boucle pour afficher le contenu de range. Votre code utilise les valeurs du tableau comme indices, ce qui est clairement faux. sortie seulement les valeurs directement:

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

Oh merci beaucoup. Je ne savais pas comment exprimer une augmentation, mais j'avais le sentiment qu'il y avait un meilleur moyen. Merci encore! – Batsu

0

Vous êtes incrémenter les variables après avoir ajouté la valeur d'origine à l'élément de tableau. Donc, quand vous faites cela: int m0 ​​= 0; intervalle [0] = m0 ++;

sémantiquement la même chose que ceci:

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

changer donc à ceci:

range[0] = ++m0; 

qui est essentiellement le même que:

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

Faites ceci pour tous vos éléments et variables de tableau, et vous devriez aller bien.

HTH!

Questions connexes