使用vb.net查找数组中的最小值和最大值

时间:2008-10-21 13:07:15

标签: arrays vb.net

我需要在数组中找到最小值和最大值。 .max函数有效但.min保持显示为零。

Public Class Program_2_Grade
    Dim max As Integer
    Dim min As Integer
    Dim average As Integer
    Dim average1 As Integer
    Dim grade As String
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text = Nothing Or TextBox1.Text > 100 Then
            MsgBox("Doesn't Meet Grade Requirements", MsgBoxStyle.Exclamation, "Error")
            TextBox1.Clear()
            TextBox1.Focus()
            counter = 0
        Else
            grade_enter(counter) = TextBox1.Text
            TextBox1.Clear()
            TextBox1.Focus()
            counter = counter + 1

            If counter = grade_amount Then
                max = grade_enter.Max()
                min = grade_enter.Min()

                For i As Integer = 0 To counter
                    average = average + grade_enter(i) / counter
                    average1 = average1 + grade_enter(i) - grade_enter.Min / counter
                Next

                Select Case average
                    Case 30 To 49
                        grade = "C"
                    Case 50 To 69
                        grade = "B"
                    Case 70 To 100
                        grade = "A"
                    Case Else
                        grade = "Fail"
                End Select

                If (Program_2.CheckBox1.Checked = True) Then
                    Program_2.TextBox4.Text = _
                ("Name:" & " " & (Program_2.TextBox1.Text) & vbNewLine & _
                "Class: " & (Program_2.TextBox2.Text) & vbNewLine & _
                "Number Of Grades:" & " " & (Program_2.TextBox3.Text) & vbNewLine & _
                "Max:" & " " & max & vbNewLine & _
                "Min:" & " " & min & vbNewLine & _
                "Average:" & " " & average1 & vbNewLine) & _
                "Grade:" & " " & grade & vbNewLine & _
                "Dropped Lowest Grade"
                Else
                    Program_2.TextBox4.Text = _
                ("Name:" & " " & (Program_2.TextBox1.Text) & vbNewLine & _
                "Class: " & (Program_2.TextBox2.Text) & vbNewLine & _
                "Number Of Grades:" & " " & (Program_2.TextBox3.Text) & vbNewLine & _
                "Max:" & " " & max & vbNewLine & _
                "Min:" & " " & min & vbNewLine & _
                "Average:" & " " & average & vbNewLine) & _
                "Grade:" & " " & grade & vbNewLine
                End If

                Me.Close()
                average = 0
                average1 = 0
                counter = 0
            End If
        End If
    End Sub

我的数组设置在全局范围内。

3 个答案:

答案 0 :(得分:5)

您尚未显示创建grade_enter的位置。我的猜测是它比它需要的大,所以当你试图找到最小值时,会有“空”条目(值为0)被拾取。

您可以将其更改为:

max = grade_enter.Take(counter).Max()
min = grade_enter.Take(counter).Min()

作为一种使其工作的黑客方式,但最好使用适当的空间来开始(或List(Of Integer))。

答案 1 :(得分:3)

Stocksy101:

正如其他人所提到的,您的数组的初始值将为0,因此如果您创建的数组大于必要数量,Min()将始终返回0.

此外,Visual Basic .NET的一个可爱的小怪癖是当你声明一个数组时:

Public grade_enter(20) As Integer

您实际上是在创建一个21项数组,而不是20项数组。 (VB将数组声明为其上限。)(参见StartVBDotNet。)这可能与它有关。

无论如何,如果您使用的是VB.NET 2005或2008,您可以考虑查看List(Of Integer)类。 (这实际上只是List类;它就是所谓的“泛型”。)此类将允许动态调整大小的数组,这些数组会根据添加到它们的项目增大或缩小。遗憾的是,它不具有Min()Max()方法,但它确实有ToArray()方法,然后您可以从中运行Min()Max()方法。

答案 2 :(得分:0)

我很难找到你定义grade_enter()的位置。如果将其分解为几个较小的方法,那么该代码将更容易阅读。但我猜你把它定义为一个整数数组,其静态大小足以容纳教授告诉你的许多项目。在这种情况下,任何未设置的项目的值都将为0,这将小于输入的任何等级。您需要考虑到这一点,可能是使用List(Of Integer)而不是数组。