0

高度な VB クラスの大学生で、フォーラムに助けを求めています - コードの例をいくつか見つけましたが、これを理解するのに苦労しています..どんな助けも大歓迎です:)

このアプリケーションは、bin に保存されている .txt ファイルをインポートします。data.txt という名前のデバッグ フォルダー ..20 レコード、レコードあたり 3 行、最後の行は学生の成績です。各レコードの成績を合計し、で割って成績を平均する必要があります。 20 平均を示すlstboxに表示します。

これまでのところ、私は..

    Dim objReader As IO.StreamReader
    Dim intFill As Integer
    Dim intCount As Integer = 0
    Dim intAverage As Integer
    Dim strLocationAndNameOfFile As String = "data.text"

    If IO.File.Exists(strLocationAndNameOfFile) = True Then
        objReader = IO.File.OpenText(strLocationAndNameOfFile)
    Else
        MsgBox("The file is not available. Restart the program when the file is avilable", , "Error")
        Me.Close()
    End If

    If IO.File.Exists(strLocationAndNameOfFile) Then
        objReader = IO.File.OpenText(strLocationAndNameOfFile)
        Do While objReader.Peek <> -1
            _strName(intCount) = Convert.ToString(objReader.ReadLine())
            _strItemID(intCount) = Convert.ToString(objReader.ReadLine())
            _intGrade(intCount) = Convert.ToInt32(objReader.ReadLine())
            intCount += 1
        Loop
        objReader.Close()
    End If

    For intFill = 0 To (_strName.Length - 1)
        *'intAverage = SUM OF ALL AVERAGES / LENGTH OF ARRAY -1*
        Me.lstAverage.Items.Add(intAverage.ToString())
4

2 に答える 2

1

成績を読むためにループしている間、それらを合計します

    Dim total as Integer
    Do While objReader.Peek <> -1
        _strName(intCount) = Convert.ToString(objReader.ReadLine())
        _strItemID(intCount) = Convert.ToString(objReader.ReadLine())
        _intGrade(intCount) = Convert.ToInt32(objReader.ReadLine())
        total += _intGrade(intCount)
        intCount += 1
    Loop

そして、20または_intGrade.Lengthで除算します

    intAverage = total / _intGrade.Length
于 2013-03-08T21:36:22.180 に答える
1

あまりにも多くの問題、他人の宿題をするのが嫌いなのと同じくらい、これがどのように見えるか見てほしい

Public Function GetAverageGrade(ByVal filename As String) As Double
    Dim totalGrade As Integer = 0
    Dim lineCount As Integer = 0
    Dim line As String

    Using rdr As New IO.StreamReader(filename)
       While (line = rdr.ReadLine()) IsNot Nothing
           lineCount += 1
           If lineCount Mod 3 = 0 Then totalGrade += Convert.ToInt32(line)
       End While
    End Using
    Return totalGrade / (lineCount / 3.0)
End Function

もちろん、平均点を取得するだけでなく、そのデータを使ってもっと多くのことをしたいと思うでしょう。したがって、さらに優れたオプションは、すべてを一連のレコードとして読み取るビルド コードです。

Public Class GradeItem
    Public Property Name As String
    Public Property Item As String
    Public Property Grade As Integer
End Class

その後

Public Iterator Function ReadGradeItems(ByVal fileName As String) As IEnumerable(Of GradeItem)
    Using rdr As New IO.StreamReader(fileName)
        While rdr.Peek() <> -1
            Yield New GradeItem With {.Name = rdr.ReadLine(), .Item= rdr.ReadLine(), .Grade = Convert.ToInt32(rdr.ReadLine()}
        End While
    End Using
End Function

そして今それをすべてまとめてください:

Dim grades As IEnumerable(Of GradeItem) = ReadGradeItems("data.text")

lstAverage.Items.Add(grades.Select(Function(g) g.Grade).Average())
于 2013-03-08T22:06:47.580 に答える