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.:)