2013-11-28 4 views
0

Здравствуйте, я пытаюсь добавить новые оценки в текстовый файл, используя кнопку btnRECORD, введенную в текстовое поле txtRECORD. Я использую кнопку 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

Файл.WriteAllLines хочет массив строк не из двухместных. Я полагаю, что у вас есть опция Strict, установленная в Off, иначе этот код не должен компилироваться. – Steve

+0

Я думаю, что ваш ReDim не увеличивает размер массива. Он должен быть (temp.Length). И ваши комментарии не используют правильный символ ... это компиляция? –

ответ

0

К сожалению, ваш C# показывает :). Комментарии в VB обозначаются как '

Основная проблема заключается в том, что вы выбрали массив из двух строк. В методе WriteAllLines. Нечто подобное должно работать лучше:

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

Другая вещь, которую я заметил, индексы массива являются целыми числами, но один из ваших для петель объявляется с двойным.

Чтобы использовать возвращаемый тип функции, вы должны явно объявить этот тип, чтобы компилятор мог его распознать.

Function avg(ByVal average As Double, ByVal aboveAverage As Integer) As Integer 
Смежные вопросы