2017-03-08 45 views
1

我想找到3個整數之間的最大整數。如何找到3個整數之間的最大整數

我可以通過嵌套If聲明來做到這一點。由於我有更多的代碼可以寫,但是這會很長,不整潔。

我在想,如果有發現的最大整數(S)(包括如果讓我們說AB是平等的,但均高於C)更簡單的方法。

P.S你可以用二維數組做這個嗎?

+0

他們都將是整數/雙精度/小數?如果不是,那麼不是很容易。 – David

+0

他們都是整數,但是,我需要知道哪些是哪個。 – Suhaib

+0

「進一步的代碼」是否依賴於哪個變量是最大的? –

回答

2

使用LINQ做到這一點:

Dim numbers() As Integer = {1, 3, 5} 

Dim max As Integer = numbers.Max() 

Debug.Write("Max number in numbers() is " & max.ToString()) 

輸出:

enter image description here

上編輯爲每對話與OP想知道哪個流派被評爲最佳。

當被問及時你如何獲得數據? OP迴應:

我在每一行都有一個包含電影|流派的文本文件。我讀到這一點,並計算哪種類型(3分)是最高的。

我已經草擬了一些從文本文件讀取並填充類的代碼。

首先讓我告訴你的代碼:

Dim myFilms As New Films 

Using sr As New IO.StreamReader("C:\films.txt") 

    Do Until sr.Peek = -1 

     Dim columns As String() = sr.ReadLine().Split(New Char() {"|"c}, StringSplitOptions.RemoveEmptyEntries) 

     'columns(0) = film name 
     'columns(1) = genre 
     myFilms.Add(New Film(columns(0), columns(1))) 
    Loop 

End Using 

If myFilms.Count > 0 Then 
    Dim bestGenre = myFilms.GetBestGenre() 

    'Go off and read the genre file based on bestGenre 
End If 

從上面的代碼,你可以看到類Films被填充了一個新Film。然後,我會從Films課程中調用一種方法,但前提是有電影可供選擇。讓我告訴你這兩個類的結構:

電影:

Public Class Film 
    Public Key As String 

    Public Sub New(ByVal filmName As String, 
        ByVal genre As String) 

     _filmName = filmName 
     _genre = genre 

    End Sub 

    Private _filmName As String 
    Public ReadOnly Property FilmName As String 
     Get 
      Return _filmName 
     End Get 
    End Property 

    Private _genre As String 
    Public ReadOnly Property Genre As String 
     Get 
      Return _genre 
     End Get 
    End Property 

End Class 

電影:

Public Class Films 
    Inherits KeyedCollection(Of String, Film) 

    Protected Overrides Function GetKeyForItem(ByVal item As Film) As String 
     Return item.Key 
    End Function 

    Public Function GetBestGenre() As String 

     Return Me.GroupBy(Function(r) r.Genre).OrderByDescending(Function(g) g.Count()).First().Key 

    End Function 

End Class 

我必須指出,儘管代碼工作,它可能會粘住如果你有兩個或更多的聯合頂級流派。該代碼仍然有效,但它只返回其中一種流派。您可能希望根據該場景擴展代碼以滿足您的需求。

0

嘗試這樣:

Dim max As Integer 
max = integer1 

If integer2 > max Then 
    max = integer2 
End If 

If integer3 > max Then 
    max = integer3 
End If 

,我能想到的把我的頭要做到這一點的頂部沒有更多的辦法。

+1

這可以通過在第一個if語句之前將max1賦值爲max來縮短... –

+0

@ZoharPeled好點,現在做出相關更改。 – David

+0

@David如果整數1和2是相同的並且都在3以上呢?編輯:此外,我需要知道,最大=整數3,而不是隻給我最高的數字。 – Suhaib

0

沿着這些線的東西可以適用於任何數量的整數。 將數字放入一個數組中,然後使用For[...]Next語句來循環比較當前成員與max的數組。如果max較低,請將其設置爲當前成員。當循環終止,max將包含最高數量:

Dim nums() As Integer = {1, 2, 3} 
Dim max As Integer 

For i = 0 To nums.Length - 1 
    If max < nums(i) Then 
     max = nums(i) 
    End If 
Next 
+0

難道你不只是'nums.max()'? – Suhaib

+1

是的,與@ Bugs'*回答比較顯示我是一個老前輩,前Linq,那種人。但是在我的辯護中,我的建議代碼可能更容易修改,包括識別陣列中的位置,或者處理當第一個位置有一條平行線時會發生什麼(您在問題中提到但沒有指定應該發生什麼)(*和他不僅提供了一個整潔的答案,而且整理了_my_佈局和標點符號!一個真正的紳士!) – peterG

+0

我看到,我有2個問題。首先,如何修改以處理第一名的平局?其次,爲什麼你要'nums.length - 1'而不是'nums.length'? – Suhaib

相關問題