Visual Basic .NET中的预期值(数学期望)

时间:2011-11-21 14:59:45

标签: vb.net math

我有一个以欢迎屏幕开头的程序“输入随机变量X的数字”,这个数字指的是列。如果输入5 =>将创建一个DataGridView,其中包含5列和2行(第一行用于用户输入的随机变量,第二行用于概率)。例如:

X 1 2 3 4 5 6

p 2 2 2 2 2 2

我必须将x1乘以概率p1,将值x2乘以概率p2,依此类推。所以EX = x1*p1 + x2*p2 +...问题出现了 - 如何相乘然后再添加它们?

只有2行,这就是我需要的数量:

我只启用了2行,这就是我必须拥有的这个程序:

  Const allowedRows As Integer = 2

    Private Sub DataGridView1_UserAddedRow(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles DataGridView1.UserAddedRow
        DataGridView1.AllowUserToAddRows = DataGridView1.RowCount <= allowedRows
    End Sub

    Private Sub DataGridView1_UserDeletedRow(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles DataGridView1.UserDeletedRow
        DataGridView1.AllowUserToAddRows = DataGridView1.RowCount <= allowedRows
    End Sub

循环是:

    For j = 0 To DataGridView1.Columns.Count
    For i As Integer = 0 To DataGridView1.RowCount - 1
        multi = CInt(DataGridView1.Rows(i).Cells(j).Value) * CInt(DataGridView1.Rows(i).Cells(j).Value)
    Next
    EX += multi
Next

我不认为它必须是这样的(它给出了OutOfRange异常),但这就是我写在这里的原因,所以如果有人知道怎么做,我会非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我对C Sharp比较熟悉,如果它不是100%,请原谅我的语法。

我觉得你最喜欢那里。我会给出两组代码,这样你就可以将它从C Sharp中解脱出来,如果我的VB语法稍微偏离......无论哪种方式,概念都应该是合理的。

VB

For j = 0 To DataGridView1.Columns.Count          
   EX += CInt(DataGridView1.Rows(0).Cells(j).Value) * // mult p*X in each column
      CInt(DataGridView1.Rows(1).Cells(j).Value)      //  and add total 'EX'           
Next   

C#

//Do math
int EX = 0;
for (int j = 0; j < dgv.Columns.Count; j++)
{
   EX += Convert.ToInt32(dgv.Rows[0].Cells[j].Value) *
      Convert.ToInt32(dgv.Rows[1].Cells[j].Value);
}