2 votes

2 x 10 nombres générés au hasard ont la même somme c#

J'ai 2 boîtes de liste dans lesquelles je dois placer 10 nombres générés au hasard. Je dois ensuite calculer la somme de la boîte de liste 1 et la somme de la boîte de liste 2 et les comparer pour voir laquelle est la plus grande. J'obtiens des nombres différents dans chaque boîte de liste mais, pour une raison quelconque, la somme des boîtes de liste est toujours la même. Comment puis-je faire en sorte que la somme soit différente pour chaque boîte de liste ? Voici mon code pour l'instant.

 private void btnGo_Click(object sender, EventArgs e)
    {

        Random random = new Random();

        listBox1.Items.Clear();
        listBox2.Items.Clear();

        for (int i = 0; i < 10; i++)
        {

            int nummer = random.Next(20);
            int nummer2 = random.Next(20);
            listBox1.Items.Add(nummer);
            listBox2.Items.Add(nummer2);
        }

        if (addListbox1() > addListbox2())
        {
            textBox1.Text = "Listbox1 heeft de hoogste waarde namelijk " + Convert.ToString(addListbox1());
            listBox1.BackColor = Color.Green;
            listBox2.BackColor = Color.Red;

        }

        else
        {

            textBox1.Text = "Listbox2 heeft de hoogste waarde namelijk " + Convert.ToString(addListbox2());
            listBox1.BackColor = Color.Red;
            listBox2.BackColor = Color.Green;

        }

    }
    private int addListbox1()
    {
        int listbox1total = 0;

        for (int k = 0; k < listBox1.Items.Count;)
        {
            listbox1total += Convert.ToInt32(listBox1.Items[k++]);
        }
        return listbox1total;
    }

    private int addListbox2()
    {
        int listbox2total = 0;
        int k = 0;

        while(k < listBox2.Items.Count)
        {
            listbox2total += Convert.ToInt32(listBox1.Items[k++]);

        }
        return listbox2total;
    }

3voto

Dmitry Bychenko Points 17719

Vous avez un faute de frappe (une vieille histoire de copier + coller ) dans le code :

listbox2total += Convert.ToInt32(listBox1.Items[k++]);

devrait être

// please, notice "listBox2.Items"
listbox2total += Convert.ToInt32(listBox2.Items[k++]);

c'est-à-dire listbox2total devrait être la somme de listBox2.Items .

Afin de éviter de telles erreurs, modifiez la conception, ne vous copiez pas les méthodes d'extraction :

// Easiest, but not thread safe
private static Random random = new Random();

private static void FillBox(ListBox box, int count = 10) {
  box.Items.Clear();

  box.Items.AddRange(Enumerable
    .Range(0, count)
    .Select(x => (Object) random.Next(20))
    .ToArray());
}

private static int SumBox(ListBox box) {
  return box.Items
    .OfType<Object>()
    .Sum(x => Convert.ToInt32(x));
}

...

FillBox(listBox1);
FillBox(listBox2);

if (SumBox(listBox1) > SumBox(listBox2)) {
  ...
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X