如何解决检查两个键是否匹配不正确
| 此应用程序的运行方式就像您正在玩彩票一样,您从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 举报,一经查实,本站将立刻删除。