2013-11-28 31 views
0

你好,我正在嘗試使用在文本框txtRECORD中輸入的按鈕btnRECORD將新等級添加到文本文件。我正在使用按鈕btnDISPLAY來計算分數的平均值和高於平均值的分數,並將它們顯示在列表框中。但我似乎無法用btnRECORD添加新的等級到文本文件。 (文本文件爲空)將等級添加到vb.net中的文本文件

Public Class frmGRADES 
Dim temp() As String = IO.File.ReadAllLines("Exam.txt") 
Dim grades(temp.Length - 1) As Double 
Dim average As Double 
Dim aboveAverage As Integer 

Function avg(ByVal average As Double, ByVal aboveAverage As Integer)//function for average 
    For i As Double = 0 To grades.Length - 1 
     If grades(i) > average Then 
      aboveAverage = aboveAverage + 1 
     End If 
    Next 
    Return aboveAverage 
End Function 

Private Sub btnRECORD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRECORD.Click 
    ReDim Preserve grades(temp.Length - 1) 
    grades(temp.Length - 1) = CDbl(txtRECORD.Text) 
    IO.File.WriteAllLines("Exam.txt", grades) //write grades to textfile 
    aboveAverage = 0 
End Sub 

Private Sub btnDISPLAY_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDISPLAY.Click 
    lstRESULTS.Items.Clear() 
    For i As Integer = 0 To grades.Length - 1 
     grades(i) = CDbl(temp(i)) 
    Next 
    average = grades.Average 
    lstRESULTS.Items.Add("The Average Score is: " & average) 
    aboveAverage = avg(average, aboveAverage) 


    lstRESULTS.Items.Add("Number of Grades above average is: " & aboveAverage) 
    aboveAverage = 0 
End Sub 
End Class 
+3

File.WriteAllLines想要一個不是雙精度的字符串數組。我想你已經把Option Strict設置爲Off,否則這段代碼不應該編譯 – Steve

+0

我認爲你的ReDim沒有增加數組的大小。它應該是(temp.Length)。而你的評論並沒有使用正確的角色......這是編譯嗎? –

回答

0

糟糕你的C#顯示:)。在VB中的評論意味着一個'

您的主要問題似乎是將一個double數組轉換爲字符串。在WriteAllLines方法中。這樣的事情應該更好地工作:

IO.File.WriteAllLines("Exam.txt", (From d In grades 
              Let str As String = d.ToString 
              Select str).ToArray) 

另一件事我注意到,數組索引是整數,但你的for循環與雙申報之一。

要使用函數的返回類型,應該顯式聲明該類型,以便編譯器可以識別它。

Function avg(ByVal average As Double, ByVal aboveAverage As Integer) As Integer