我需要在数组中找到最小值和最大值。 .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
我的数组设置在全局范围内。
答案 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)
而不是数组。