2008-10-21 28 views
2

배열에서 최소값과 최대 값을 찾아야합니다. .max 함수는 작동하지만 .min은 0을 계속 표시합니다.vb.net을 사용하여 배열에서 최소값과 최대 값 찾기

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 

내 배열은 전역 범위로 설정됩니다.

답변

5

grade_enter가 생성되는 위치가 표시되지 않았습니다. 내 추측으로는 필요 이상으로 크기 때문에 최소값을 찾으려고 할 때 "값 비어있는"항목 (값 0)이 있습니다. 작동 만드는 해키 방법으로

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

, 그러나 시작하는 공간의 적당한 양을 사용하는 것이 좋을 것이다 (또는 List(Of Integer)) :

당신은 그것으로 변경 될 수 있습니다.

+0

몇 초 만에 나를 때려 눕히고, 어쨌든 당신이 더 잘 표현한 방식을 좋아합니다. –

+0

나는 말해야 만한다. 나는 전에 Take() 메서드를 발견했다고 생각하지 않는다. 산뜻한! –

+0

.Take()는 System.Linq.Enumerable의 확장 메서드입니다. 그것 (그리고 더) msdn에 체크 : http://msdn.microsoft.com/en-us/library/system.linq.enumerable_methods.aspx –

0

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 클래스이며, "generic"이라고하는 것입니다.)이 클래스를 사용하면 동적으로 크기가 조정 된 배열을 추가 할 수 있습니다.이 배열은 추가 된 항목을 기준으로 확장되거나 축소됩니다. 불행히도 Min()Max() 메서드를 가지고 있지는 않지만 메서드가 있으므로 Min() 및 메서드를 실행할 수 있습니다.

0

나는 위에서 질문이 있습니다. 위의 .Max() 값을 가진 grade_enter()에서 배열 요소의 인덱스 번호를 얻는 방법은 무엇입니까?

max = grade_enter.Max() '.... = grade_enter (Index_number)

가능한 코드 : 정수로 index_number 어두워 = grade_enter.Max.Index

나는 MS 라이브러리에 보였지만 적절한 인덱스 기능을 보지 않았다.

현재 색인을 가져 오기 위해이 최대 값에 대해 grade_enter()를 검색하기 위해 'do until'루프를 사용합니다. 감사합니다.

+0

다른 질문이있는 경우 질문하기를 클릭하여 질문 할 수 있습니다. 평판이 충분하면 현상금을 추가하여이 질문에 더 많은 관심을 쏟을 수 있습니다. – Ghost

관련 문제