2011-11-21 80 views
0

我有一个程序,它以欢迎屏幕“输入随机变量X的数量”开头,这个数字是指列。如果输入5 =>将以5列和2行创建(第一个用于用户输入的随机变量,第二个用于概率)。例如:在Visual Basic .NET中的期望值(数学期望)

X 1 2 3 4 5 6 

p 2 2 2 2 2 2 

我要乘x1概率p1,用概率值p2x2,等等。所以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异常),但这就是为什么我在这里写作,所以如果有人知道如何做,我会非常感激。提前致谢。

+0

将它永远只有2行的GridView的? –

+0

这个exeption来自'DataGridView1.Columns.Count'。它必须是'DataGridView1.Columns.Count - 1' –

回答

0

我更熟悉C Sharp,所以如果不是100%,请原谅我的语法。

我觉得你是最有方法的地方。我会给出两套代码,这样如果我的VB语法稍微偏离了C sharp,那么这个概念应该是合理的。

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); 
}