微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查两个键是否匹配不正确

如何解决检查两个键是否匹配不正确

| 此应用程序的运行方式就像您正在玩彩票一样,您从comboBox中选择了5个数字,单击一个按钮以生成5个关键数字,然后按另一个按钮来检查结果(在下面的文本框上介绍了大奖后,又称为“prémio”)。 进行检查的按钮是突出显示的VerificarPrémio。 这是它的代码
private void button5_Click(object sender,EventArgs e)
{

    if (textBox1.Text != \"\" && textBox1.Text!=\"Prémio em €\")
    {
        int contador = 0;

        for (int i = 1; i <= 5; i++)
        {
            string posicao = i.ToString();

            for (int c = 1; c <= 5; c++)
            {
                string poschave = c.ToString();
                if (listBox1.Items.IndexOf(posicao) == 
                    listBox2.Items.IndexOf(poschave))
                {
                    contador = contador + 1;

                }

            }

            i = int.Parse(posicao);

            double valor;
            double premio = double.Parse(textBox1.Text);

            if (contador == 5)
            {
                MessageBox.Show(\" Parabens ganhou o 1º premio acertou 5 números 
                    o seu prémio é de \" + premio + \"€\");
            }
            else
            {
                if (contador == 4)
                {
                    valor = premio * 0.75;
                    MessageBox.Show(\" Acertou 4 numeros o seu premio é: \" + 
                       valor + \"€\");
                }
                else
                {
                    if (contador == 3)
                    {
                        valor = premio * 0.5;
                        MessageBox.Show(\"Acertou 3 numeros o seu premio é: \" + 
                           valor + \"€\");
                    }
                    else
                        if (contador <= 2)
                        {
                            MessageBox.Show(\" Infelizmente nao ganhou,nada tente outra vez\");
                        }
                    }

                }
            }
        }
    }
无论我做什么,它总是显示messageBox,说我5个都正确。 编辑: listBox1是左侧的那个(3、9、17、20、10),您可以从组合框中选择它们,然后单击\“ Apostar \”。 listBox2是右侧的框。 编辑2: 通过更换
for (int c = 1; c <= 5; c++)
            {
                string poschave = c.ToString();
                if (listBox1.Items.IndexOf(posicao) == listBox2.Items.IndexOf(poschave))
                {
                    contador = contador + 1;

                }

            }
                foreach (var item in listBox1.Items)
            {
                // Convert it to string to avoid object reference comparison. Not 100% 
                // sure if this is needed
                string value = item.ToString();
                if (listBox2.Items.Contains(value))
                    contador++;
            }
错误不再显示,但是仍然无法正常工作,我的猜测是程序正在检查它们是否匹配,然后得到结果,因此它始终连续5次显示“您一无所获” ... 我怎样才能解决这个问题?     

解决方法

        我不懂西班牙语(?),因此很难理解您的代码(即使您使用的是本地化的UI,也请使用英文变量名) 但是,导致此问题的一个原因可能是此行:
listBox1.Items.IndexOf(posicao) == listBox2.Items.IndexOf(poschave)
如果在各自的列表框中未找到
posicao
poschave
,则将返回-1并且表达式为true(即
contador
将递增)。我猜这不是理想的行为。 如果您想检查左侧列表框中的某个项目在右侧是否也可用,则可以执行以下操作:
void Button_Click(object sender,EventArgs e)
{ 
    if (textBox1.Text == \"\" || textBox1.Text == \"Prémio em €\")
        return;
    int numMatches = 0;
    foreach (var item in listBox1.Items)
    {
        if (listBox2.Items.Contains(item))
            numMatches++;
    }
    // numMatches will now contain the number of elements in the left 
    // listbox that also exist in the right listbox
    if (numMatches > 2)
    {
        double premio = Double.Parse(textBox1.Text);
        double prize = 0;
        if (numMatches == 5)
          prize = premio * 1.0;
        if (numMatches == 4)
          prize = premio * 0.75;
        else 
          prize = premio * 0.5;
        // Use string.Format() instead to get fancier formatting of numbers
        Messagebox.Show (\"Sweet,you got \" + numMatches + \" out of 5 correct numbers. Your prize is \" + prize + \"€\");
    }
    else
    {
        MessageBox.Show(\"Sorry,not enough matches - you win nothing!\");
    }
}
编辑: 之所以会得到5个消息框,是因为您在循环5次的for循环中调用了
Messagebox.Show()
。我已经更新了上面的代码示例,以执行您希望按钮回调执行的操作     ,        您的源代码太复杂了,您有两个循环,一个整数>字符串,然后是字符串>整数...尝试以下操作:
int count = 0;
for (int i = 0; i < 5; i++)
{
    if (listBox2.Items.IndexOf(listBox1.Items[i]) > 0)
    {
        count++;
    }
}
// count is 0 - 5
如果在右边的ListBox中,则只检查左边的ListBox的5个数字。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。