繁体   English   中英

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

[英]Finding min and max values in an array using 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

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

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

您可以将其更改为:

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

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

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()方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM