Dot-Net

VB.Net ‘Sub Main’ 未找到

  • January 27, 2022

好的,我星期一有一個 A 級計算考試,我一直在研究預發布的骨架程式碼。

今天早上,當我嘗試時,我得到了一個錯誤提示'Sub Main' was not found。程式碼中顯然有一個Sub Main(),我將在下面粘貼。

sub main()在出現第二個錯誤之前,我嘗試添加另一個Sub Main() has multiple definitions

我真的需要對此進行排序,因此將不勝感激任何幫助。

這是 Sub Main() 本身的程式碼:

Sub Main()
   Dim Choice As Char
   Dim Deck(52) As TCard
   Dim RecentScores(NoOfRecentScores) As TRecentScore
   Randomize()
   Do
       DisplayMenu()
       Choice = GetMenuChoice()
       Select Case Choice
           Case "1"
               LoadDeck(Deck)
               ShuffleDeck(Deck)
               PlayGame(Deck, RecentScores)
           Case "2"
               LoadDeck(Deck)
               PlayGame(Deck, RecentScores)
           Case "3"
               DisplayRecentScores(RecentScores)
           Case "4"
               ResetRecentScores(RecentScores)
       End Select
   Loop Until Choice = "q"
End Sub

如果有幫助,這裡是完整的程式碼:

'Skeleton Program code for the AQA COMP1 Summer 2014 examination
'this code should be used in conjunction with the Preliminary Material
'written by the AQA COMP1 Programmer Team
'developed in the Visual Studio 2008 (Console Mode) programming environment (VB.NET)
Module CardPredict
Const NoOfRecentScores As Integer = 3
Structure TCard
   Dim Suit As Integer
   Dim Rank As Integer
End Structure
Structure TRecentScore
   Dim Name As String
   Dim Score As Integer
End Structure
Sub Main()
   Dim Choice As Char
   Dim Deck(52) As TCard
   Dim RecentScores(NoOfRecentScores) As TRecentScore
   Randomize()
   Do
       DisplayMenu()
       Choice = GetMenuChoice()
       Select Case Choice
           Case "1"
               LoadDeck(Deck)
               ShuffleDeck(Deck)
               PlayGame(Deck, RecentScores)
           Case "2"
               LoadDeck(Deck)
               PlayGame(Deck, RecentScores)
           Case "3"
               DisplayRecentScores(RecentScores)
           Case "4"
               ResetRecentScores(RecentScores)
       End Select
   Loop Until Choice = "q"
End Sub
Sub Main()
   Console.Write("Boo")
End Sub
Function GetRank(ByVal RankNo As Integer) As String
   Dim Rank As String = ""
   Select Case RankNo
       Case 1 : Rank = "Ace"
       Case 2 : Rank = "Two"
       Case 3 : Rank = "Three"
       Case 4 : Rank = "Four"
       Case 5 : Rank = "Five"
       Case 6 : Rank = "Six"
       Case 7 : Rank = "Seven"
       Case 8 : Rank = "Eight"
       Case 9 : Rank = "Nine"
       Case 10 : Rank = "Ten"
       Case 11 : Rank = "Jack"
       Case 12 : Rank = "Queen"
       Case 13 : Rank = "King"
   End Select
   Return Rank
End Function
Function GetSuit(ByVal SuitNo As Integer) As String
   Dim Suit As String = ""
   Select Case SuitNo
       Case 1 : Suit = "Clubs"
       Case 2 : Suit = "Diamonds"
       Case 3 : Suit = "Hearts"
       Case 4 : Suit = "Spades"
   End Select
   Return Suit
End Function
Sub DisplayMenu()
   Console.WriteLine()
   Console.WriteLine("MAIN MENU")
   Console.WriteLine()
   Console.WriteLine("1.  Play game (with shuffle)")
   Console.WriteLine("2.  Play game (without shuffle)")
   Console.WriteLine("3.  Display recent scores")
   Console.WriteLine("4.  Reset recent scores")
   Console.WriteLine()
   Console.Write("Select an option from the menu (or enter q to quit): ")
End Sub
Function GetMenuChoice() As Char
   Dim Choice As Char
   Choice = Console.ReadLine
   Console.WriteLine()
   Return Choice
End Function
Sub LoadDeck(ByRef Deck() As TCard)
   Dim Count As Integer
   FileOpen(1, "deck.txt", OpenMode.Input)
   Count = 1
   While Not EOF(1)
       Deck(Count).Suit = CInt(LineInput(1))
       Deck(Count).Rank = CInt(LineInput(1))
       Count = Count + 1
   End While
   FileClose(1)
End Sub
Sub ShuffleDeck(ByRef Deck() As TCard)
   Dim NoOfSwaps As Integer
   Dim Position1 As Integer
   Dim Position2 As Integer
   Dim SwapSpace As TCard
   Dim NoOfSwapsMadeSoFar As Integer
   NoOfSwaps = 1000
   For NoOfSwapsMadeSoFar = 1 To NoOfSwaps
       Position1 = Int(Rnd() * 52) + 1
       Position2 = Int(Rnd() * 52) + 1
       SwapSpace = Deck(Position1)
       Deck(Position1) = Deck(Position2)
       Deck(Position2) = SwapSpace
   Next
End Sub
Sub DisplayCard(ByVal ThisCard As TCard)
   Console.WriteLine()
   Console.WriteLine("Card is the " & GetRank(ThisCard.Rank) & " of " & GetSuit(ThisCard.Suit))
   Console.WriteLine()
End Sub
Sub GetCard(ByRef ThisCard As TCard, ByRef Deck() As TCard, ByVal NoOfCardsTurnedOver As Integer)
   Dim Count As Integer
   ThisCard = Deck(1)
   For Count = 1 To (51 - NoOfCardsTurnedOver)
       Deck(Count) = Deck(Count + 1)
   Next
   Deck(52 - NoOfCardsTurnedOver).Suit = 0
   Deck(52 - NoOfCardsTurnedOver).Rank = 0
End Sub
Function IsNextCardHigher(ByVal LastCard As TCard, ByVal NextCard As TCard) As Boolean
   Dim Higher As Boolean
   Higher = False
   If NextCard.Rank > LastCard.Rank Then
       Higher = True
   End If
   Return Higher
End Function
Function GetPlayerName() As String
   Dim PlayerName As String
   Console.WriteLine()
   Console.Write("Please enter your name: ")
   PlayerName = Console.ReadLine
   Console.WriteLine()
   Return PlayerName
End Function
Function GetChoiceFromUser() As Char
   Dim Choice As Char
   Console.Write("Do you think the next card will be higher than the last card (enter y or n)? ")
   Choice = Console.ReadLine
   Return Choice
End Function
Sub DisplayEndOfGameMessage(ByVal Score As Integer)
   Console.WriteLine()
   Console.WriteLine("GAME OVER!")
   Console.WriteLine("Your score was " & Score)
   If Score = 51 Then
       Console.WriteLine("WOW!  You completed a perfect game.")
   End If
   Console.WriteLine()
End Sub
Sub DisplayCorrectGuessMessage(ByVal Score As Integer)
   Console.WriteLine()
   Console.WriteLine("Well done!  You guessed correctly.")
   Console.WriteLine("Your score is now " & Score & ".")
   Console.WriteLine()
End Sub
Sub ResetRecentScores(ByRef RecentScores() As TRecentScore)
   Dim Count As Integer
   For Count = 1 To NoOfRecentScores
       RecentScores(Count).Name = ""
       RecentScores(Count).Score = 0
   Next
End Sub
Sub DisplayRecentScores(ByVal RecentScores() As TRecentScore)
   Dim Count As Integer
   Console.WriteLine()
   Console.WriteLine("Recent scores:")
   Console.WriteLine()
   For Count = 1 To NoOfRecentScores
       Console.WriteLine(RecentScores(Count).Name & " got a score of " & RecentScores(Count).Score)
   Next
   Console.WriteLine()
   Console.WriteLine("Press the Enter key to return to the main menu")
   Console.WriteLine()
   Console.ReadLine()
End Sub
Sub UpdateRecentScores(ByRef RecentScores() As TRecentScore, ByVal Score As Integer)
   Dim PlayerName As String
   Dim Count As Integer
   Dim FoundSpace As Boolean
   PlayerName = GetPlayerName()
   FoundSpace = False
   Count = 1
   While Not FoundSpace And Count <= NoOfRecentScores
       If RecentScores(Count).Name = "" Then
           FoundSpace = True
       Else
           Count = Count + 1
       End If
   End While
   If Not FoundSpace Then
       For Count = 1 To NoOfRecentScores - 1
           RecentScores(Count) = RecentScores(Count + 1)
       Next
       Count = NoOfRecentScores
   End If
   RecentScores(Count).Name = PlayerName
   RecentScores(Count).Score = Score
End Sub
Sub PlayGame(ByVal Deck() As TCard, ByRef RecentScores() As TRecentScore)
   Dim NoOfCardsTurnedOver As Integer
   Dim GameOver As Boolean
   Dim NextCard As TCard
   Dim LastCard As TCard
   Dim Higher As Boolean
   Dim Choice As Char
   GameOver = False
   GetCard(LastCard, Deck, 0)
   DisplayCard(LastCard)
   NoOfCardsTurnedOver = 1
   While NoOfCardsTurnedOver < 52 And Not GameOver
       GetCard(NextCard, Deck, NoOfCardsTurnedOver)
       Do
           Choice = GetChoiceFromUser()
       Loop Until Choice = "y" Or Choice = "n"
       DisplayCard(NextCard)
       NoOfCardsTurnedOver = NoOfCardsTurnedOver + 1
       Higher = IsNextCardHigher(LastCard, NextCard)
       If Higher And Choice = "y" Or Not Higher And Choice = "n" Then
           DisplayCorrectGuessMessage(NoOfCardsTurnedOver - 1)
           LastCard = NextCard
       Else
           GameOver = True
       End If
   End While
   If GameOver Then
       DisplayEndOfGameMessage(NoOfCardsTurnedOver - 2)
       UpdateRecentScores(RecentScores, NoOfCardsTurnedOver - 2)
   Else
       DisplayEndOfGameMessage(51)
       UpdateRecentScores(RecentScores, 51)
   End If
End Sub
End Module

在此先感謝, 埃德

您必須指定啟動對象才能Sub Main被找到。在您的情況下,這是模組CardPredict

Project> [Your project] Properties>Application Tab

然後在Startup Object那裡設置。

我猜您在發生此錯誤之前將您的Module1(預設)重命名為?CardPredict

以後如果要重命名類/模組/方法名,只需右鍵點擊它並選擇重命名。然後,這會將您項目中的所有 this 實例重命名為新名稱。

我在做一個項目時遇到了同樣的問題,我是這樣解決的:

Project > ProjectName Properties > Application

更改startup ObjectForm 1或啟動表單的名稱。

引用自:https://stackoverflow.com/questions/23931908