2016-03-20 6 views
0

私のプログラムで手続きを呼び出すのに少し問題があります。基本的には、キー入力に基づいてユーザーが入力したメッセージをエンコードするように設計されたプログラムであり、関数やプロシージャーを定義していないときはすべて正常に機能し、すべてが「メイン」プロシージャーの直下にあります。Visual Basicの呼び出し手順

しかし、関数とプロシージャを定義したので、「main」プロシージャ内からプロシージャを呼び出す際に問題が発生しています。以下は私のコードです:

Dim alphabet As String = "abcdefghijklmnopqrstuvwxyz " 
Dim cipherText As String = "abcdefghijklmnopqrstuvwxyz " 
Dim charPos As Integer = 0 
Dim Cipher As String = "" 
Dim Decoded As String = "" 

Function userMessage() 
    'User inputs message 
    Dim message As String 
    Console.WriteLine("Please input your message") 
    message = Console.ReadLine() 
    Return message 
End Function 

Function userKey() 
    'User inputs key 
    Dim key As Integer 
    Console.WriteLine("Please enter your key") 
    key = Console.ReadLine() 
    Return key 
End Function 

Sub encodeMessage(ByRef message, ByRef key) 
    cipherText = cipherText.Substring(key) & cipherText.Substring(0, key) 'Reorder based on key 
    'Encode message 
    For i = 0 To message.Length - 1 
     charPos = alphabet.IndexOf(message(i)) 
     Cipher = Cipher & cipherText(charPos) 
    Next i 
    Console.WriteLine(Cipher) 
End Sub 

Sub decodeMessage(ByRef message, ByRef key) 
    cipherText = cipherText.Substring(key) & cipherText.Substring(0, key) 'Reorder based on key 
    'Decode message 
    For i = 0 To Cipher.Length - 1 
     charPos = cipherText.IndexOf(Cipher(i)) 
     Decoded = Decoded & alphabet(charPos) 
    Next i 
    Console.WriteLine(Decoded) 
End Sub 

Sub Main() 
    userMessage() 
    userKey() 
    encodeMessage() 
    decodeMessage() 
    Console.ReadLine() 

End Sub 
End Module 

私が見つける問題は、私がしようとすると、パラメータメッセージに指定されていない、それは私に

引数を語っているencodeMessagedecodeMessage 2つのプロシージャを呼び出すmain手順であります公開サブエンコードメッセージ

また、エラーはkeyです。

私は例encodeMessage(key, message)のためにそこにそれを入れて試してみましたが、私は

キーメッセージが宣言されていないというエラーを取得します。

私はその後しかし、私はそれから言って別のエラーを取得するなどのメイン機能でそれらを宣言します

適切なシグネチャを持つんがアクセスできる「メイン」メソッドは

見つかりませんでした

これは非常にイライラしています。私は非常に感謝しています(ps、私は非常にビジュアルベーシックに新しいです)。私はちょうど地球のようなメッセージと重要な変数を追加

おかげで、

+0

オプションstrictをオンにすることから始めます。次に、mainの関数からの戻り値を取得して渡すことができます: 'Dim key = userKey()'。この新しいローカルキーは、 'encodeMessage'のために定義したパラメータのうちの一つですが、渡されません。 – Plutonix

+0

私のために少し詳しく教えてください。私はまだ混乱しています。私はプロシージャ "encodeMessage"と "decodeMessage"を関数に変更し、エンコードされたメッセージとデコードされたメッセージを返しましたが、変更はありません。私はまだ "アクセスできない"メイン "メソッド"エラー –

+0

メインの署名を変更しないでください。しかし、それらの変数を収集する*メインの – Plutonix

答えて

0

は、それが

お楽しみを動作させる必要があり、エンコードとデコード機能からの重要なパラメータ

BYREF、ByRefのメッセージを脱ぎました!

Dim alphabet As String = "abcdefghijklmnopqrstuvwxyz " 
Dim cipherText As String = "abcdefghijklmnopqrstuvwxyz " 
Dim charPos As Integer = 0 
Dim Cipher As String = "" 
Dim Decoded As String = "" 
Dim message As String = "" 
Dim key As Integer= "" 

Function userMessage() 
    'User inputs message 
    Console.WriteLine("Please input your message") 
    message = Console.ReadLine() 
End Function 

Function userKey() 
    'User inputs key 
    Console.WriteLine("Please enter your key") 
    key = Console.ReadLine() 
End Function 

Sub encodeMessage() 
    cipherText = cipherText.Substring(key) & cipherText.Substring(0, key) 'Reorder based on key 
    'Encode message 
    For i = 0 To message.Length - 1 
     charPos = alphabet.IndexOf(message(i)) 
     Cipher = Cipher & cipherText(charPos) 
    Next i 
    Console.WriteLine(Cipher) 
End Sub 

Sub decodeMessage() 
    cipherText = cipherText.Substring(key) & cipherText.Substring(0, key) 'Reorder based on key 
    'Decode message 
    For i = 0 To Cipher.Length - 1 
     charPos = cipherText.IndexOf(Cipher(i)) 
     Decoded = Decoded & alphabet(charPos) 
    Next i 
    Console.WriteLine(Decoded) 
End Sub 

Sub Main() 
    userMessage() 
    userKey() 
    encodeMessage() 
    decodeMessage() 
    Console.ReadLine() 

End Sub 
End Module 
関連する問題