2

抱歉,我是编码新手,在尝试了一切之后我无法弄清楚!我有 6 个屏蔽文本框,用户输入分贝值,应该将它们保存到列表中,将每个输入到公式中并输出总分贝值,但它只是将添加的变量作为 6,这是计数列表而不是实际值。当我尝试一个 foreach 循环时,它使它成为一个无限循环。

private void dBAddButton_Click(object sender, EventArgs e)
    {         
        List<double> addDBList = new List<double>();
        double final;
        double added = 0;

        addDBList.Add(double.Parse((dB1.Text)));
        addDBList.Add(double.Parse((dB2.Text)));
        addDBList.Add(double.Parse((dB3.Text)));
        addDBList.Add(double.Parse((dB4.Text)));
        addDBList.Add(double.Parse((dB5.Text)));
        addDBList.Add(double.Parse((dB6.Text))); 

            for (int i = 0; i < addDBList.Count; i++)
           {
            added += Math.Pow(10, (i / 10));
           }

        final = 10 * Math.Log10(added);

        totaldB.Text = final.ToString();                  
    }

}

公式基本上是10log[10^(first value/10)+10^(second value/10)...+10^(nth value/10)]

4

7 回答 7

7
added += Math.Pow(10, (addDBList[i] / 10));
于 2013-01-03T21:57:23.203 回答
7
added += Math.Pow(10, (i / 10));

这是你的问题。i是数组的索引位置,而不是实际值。你想用这个:

added += Math.Pow(10, (addDBList[i] / 10));
于 2013-01-03T21:57:55.700 回答
3

i 是一个整数,范围从 0 到 5。您将该整数除以 10,众所周知,整数除法没有分数,因此 i / 10 始终为 0。本质上,您的内部循环是这样的:

added += Math.Pow(10, 0);

这是 1。这就是为什么添加的结果是 6。

你可能是这个意思:

added += Math.Pow(10, addDBList[i] / 10);
于 2013-01-03T21:58:55.540 回答
2

您可以(并且应该)使用foreach这样的:

foreach (double decibel in addDBList)
{
   added += Math.Pow(10, (decibel / 10));
}
于 2013-01-03T21:59:10.200 回答
1

要访问数组或列表中的值,您必须使用索引和标识符:

added += Math.Pow(10, (addDBList[i] / 10));
于 2013-01-03T21:58:51.093 回答
1

改变

added += Math.Pow(10, (i / 10));

added += Math.Pow(10, addDBList[i] / 10);
于 2013-01-03T21:59:13.407 回答
1

您的 for 循环是问题...将其替换为

 for (int i = 0; i < addDBList.Count; i++)
       {
        added += Math.Pow(10, ( addDBList[i] / 10));
       }
于 2013-01-03T22:01:24.723 回答