2017-10-04 6 views
0

Visual Studioで「Wordを推測する」というプログラムを構築しています。特定の条件が何回満たされたかを数える方法がわかりません

私の配列はWordを生成し、入力ボックスが表示されます。ユーザーは、入力ボックスにテキストを入力することによってその単語を推測しなければならず、正しい場合はメッセージボックスが正常に表示され、そうでない場合は、再度試みることを示すメッセージボックスが表示されます。

私はユーザーが正しいと推測する単語の数を数える関数が必要です。私はこれを持っていますが、単語がユーザーの入力と等しい場合は、ラベルに1が表示され、表示されない場合は0が表示されます。このコードは、特定のボタンがクリックされた回数を数えていたときに(さまざまな変数などで)機能していたので、なぜ今は動作しないのか混乱しています。

Dim guess As String 
guess = (LCase(InputBox("What is the word", "Guess the word")))  
Static hits As Integer 
hits = 0 
If word = guess Then hits += 1 
Label8.Text = hits 

ここで、wordは、私の配列によって生成された単語です。

なぜ上記のコードが正しい推測数を増やしていないのですか?あなたはhitsが0にそれがラインhits = 0を実行するたびに設定されていることを意味し

Static hits As Integer 
hits = 0 

を持っているので、

+3

'ヒットを= 0 'を使用すると、入力ボックスを表示した直後に毎回実行されるように表示されます。したがって、それぞれの推測で0にリセットされます。その変数を宣言して、ユーザーがゲームを開始したときに0を1回設定し、新しいゲームを開始したときにのみ0にリセットします。 – ADyson

+0

あなたはおそらくこれをいくつかのボタン/要素イベントサブの中で実行しており、毎回ヒット変数をリセットします。だから、それはサブの外側のグローバルとして宣言されるべきです。 –

答えて

1

それはうまくいきません。

代わりにあなたはそれが0に初期化されます、そしてそれは一度だけということでしょう

Static hits As Integer = 0 

を使用している場合。

+0

これは最初の質問の正確な答えと答えの拡張です...しかし、OPをもう1つ与えましょう! –

0

他の人が示唆したように、宣言の時点でhits変数を初期化し、割り当てラインを取り除く:

Static hits As Integer = 0 ' Modify the declaration like this line 
' hits = 0 - remove this line 

別の解決策は、module levelで宣言hits変数を持つことで、その場合には、 Staticキーワードは必要ありません。そして、

Private hits As Integer = 0 

あなたのコード内の好きな場所にアクセスし、その値は、あなたのメソッドの呼び出しの間で保存されているので安心します。 は、いずれにせよ、あなたは確認する必要があり、このラインがなくなっていること:

hits = 0 
関連する問題