C#需要帮助确保同一字母的多次出现被记为数字

时间:2018-09-29 11:38:15

标签: c# string button textbox

我正在用C#为学校项目编写周期表。 我想这样做,以便如果我按3次(例如)H按钮,它将显示为H3。现在只能在H2下使用,我不知道为什么?欢迎您提供任何帮助,谢谢。

    private void btn_H_Click(object sender, EventArgs e)
    {
        txt_Chemical.Text = txt_Chemical.Text + "H";
        txt_Mass.Text = txt_Mass.Text + 1.006;
        int count = txt_Chemical.Text.TakeWhile(c => c == 'H').Count();
        if(count > 1)
        {
            txt_Chemical.Text = "H" + count;
            txt_Mass.Text = txt_Mass.Text + 1.006 * count;
        }
    }

1 个答案:

答案 0 :(得分:0)

我现在无法验证它是否为真,但是请尝试:

我认为(最多可按两次H键)可能是由于代码中的这一行所致:

int count = txt_Chemical.Text.TakeWhile(c => c == 'H').Count();

TakeWhile的工作原理-从头开始遍历列表,并在不满足谓词的第一次出现时停止。

因此,当您这样做时:

txt_Chemical.Text = "H" + count;

您的第三个字母成为计数保持的值。因此,下一次TakeWhile在第二个元素上中断为“ HH2”时。TakeWhile(c => c =='H')产生两个元素集合。

尝试使用单独的变量来保持状态(点击H的次数)。

另外:

  • var之前使用int代替count-如果以后再更改类型会有所帮助
  • 如果您关心精度-对于化学药品,我认为您应该这样做,请不要使用双精度(1.006)。使用保证精度(1.006m)的小数。