【问题标题】:Finding min and max values in an array using vb.net使用 vb.net 查找数组中的最小值和最大值
【发布时间】:2010-09-18 07:40:08
【问题描述】:

我需要在一个数组中找到最小值和最大值。 .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

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

【问题讨论】:

    标签: arrays vb.net


    【解决方案1】:

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

    你可以改成:

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

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

    【讨论】:

    • 领先我几秒,反正我更喜欢你的措辞。
    • 我不得不说......我想我以前从未注意到 Take() 方法。整洁!
    • .Take() 是 System.Linq.Enumerable 上的扩展方法。在 msdn 上查看(以及更多):msdn.microsoft.com/en-us/library/…
    • 这就是我从未注意到它的原因——我现在开始使用 3.5。 :)
    【解决方案2】:

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

    【讨论】:

      【解决方案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() 方法。

      【讨论】:

        猜你喜欢
        • 2021-09-15
        • 2018-05-03
        • 2016-06-06
        • 2016-08-12
        • 2021-06-17
        • 2017-08-18
        • 2013-11-12
        • 2014-06-11
        相关资源
        最近更新 更多