我正在制作打字游戏,我需要逐个比较生成的字符串和输入字符串,然后计算%准确度。
但似乎缺少一些东西,因为这个功能没有比较好。
我做错了吗?
private void Button_Click(object sender, RoutedEventArgs e)
{
int percentage = 0;
int mistakes = 0;
string input = TextBox1.Text;
string letter = TextBox2.Text;
char[] letters1 = letter.ToCharArray();
char[] input1 = input.ToCharArray();
for (int j = 0; j < input1.Length; j++)
{
if (input1[j] != letters1[j])
mistakes = mistakes +1;
else if (input1[j] == letters1[j])
mistakes = mistakes;
}
percentage = 100 - ((mistakes / letters1.Length) * 100);
Label2.Content = percentage;
}
答案 0 :(得分:1)
您正在执行整数运算并丢失除法结果的小数部分。当你除以两个整数时,结果是另一个整数(你丢失了小数部分)。
percentage = 100 - ((mistakes / letters1.Length) * 100);
鉴于上面的代码,并且假设letters1
长度为30个字符并且有20个错误,那么20 / 30
(或可用的总字符数中的任何错误,除非每个< / em>字符错误),将导致:
percentage = 100 - ((20 / 30) * 100);
// 100 - ((0) * 100) == 100
将其中一个值转换为double
应该保留该部门的小数部分:
percentage = 100 - ((mistakes / Convert.ToDouble(letters1.Length) * 100);
// = 100 - ((20 / 30.0) * 100) == 100 - ((0.6666666) * 100) == 33.333333
答案 1 :(得分:0)
希望这适合你。
private void Button_Click(object sender, RoutedEventArgs e)
{
float percentage = 0;
float mistakes = 0;
string input = TextBox1.Text;
string letter = TextBox2.Text;
char[] letters1 = letter.ToCharArray();
char[] input1 = input.ToCharArray();
for (int j = 0; j < input1.Length; j++)
{
if (input1[j] != letters1[j])
{
mistakes++;
}
}
percentage = 100 - ((mistakes / letters1.Length) * 100);
Label2.Content = percentage.ToString();
}