Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用vb.net查找数组中的最小值和最大值_Arrays_Vb.net - Fatal编程技术网

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

Arrays 使用vb.net查找数组中的最小值和最大值,arrays,vb.net,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

我需要在数组中找到最小值和最大值。
.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\u enter的位置。我的猜测是,它比需要的大,所以当您试图找到最小值时,会出现“空”条目(值为0)

您可以将其更改为:

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

作为一种让它工作的黑客方法,但最好使用适当的空间(或
列表(整数)
)开始。我很难找到您定义的grade\u enter()的位置。如果您将代码分解为几个较小的方法,那么该代码将更易于阅读。但我猜你把它定义为一个静态大小的整数数组,它的大小足以容纳教授告诉你的任何项目。在这种情况下,任何未设置项的值均为0,该值将小于输入的任何等级。您需要考虑到这一点,可能需要使用
列表(整数)
而不是数组。

Stocksy101:

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

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

Public grade_enter(20) As Integer
实际上,您正在创建一个21项数组,而不是一个20项数组。(VB将数组声明为它们的上限。)(请参阅。)这可能与此有关


在任何情况下,如果你在VB.NET 2005或2008上,你可以考虑浏览这个类。(这实际上只是
列表
类;它被称为“泛型”)该类允许动态调整数组大小,数组大小根据添加到数组中的项而增减。不幸的是,它没有
Min()
Max()
方法,但它确实有一个方法,你可以从中运行
Min()
Max()
方法。

比我快了几秒钟,而且我更喜欢你的措辞。我不得不说。。。我想我以前从未注意过Take()方法。整洁的Take()是System.Linq.Enumerable上的扩展方法。在msdn上查看它(以及更多):这就是我从未注意到它的原因——我刚刚开始使用3.5.:)