2017-04-24 6 views
-4

私は現在シンプルなサイコロゲームをコーディングしていますが、私は混乱してしまいました。コード。CS0019 tオペランド 'int'と 'bool'のオペランドには '+ ='を適用できません

foreach (var die in Dice.rolls) 
{ 
    Console.WriteLine(die.ToString()); 
} 
if (player.score += score >= goal) 
{ 
    playing = false; 
    Console.WriteLine("{0} has won the game!", player.name); 
    Console.WriteLine("Please press any key to end the game"); 
    Console.ReadKey(); 
} 
else 
{ 
    player.score += score; 
} 

私が午前問題は、行ということです:

if (player.score += score >= goal) 

私はint型のとブールの上でそれを使用することはできませんが、if文のすべての変数である私に告げるのエラーを投げていますintのさらにここ数行:

player.score += score; 

私には誤りをしていません。

+0

より多くの情報を調べることができます。最初にスコアを追加してから、比較してください。コンパイラに言うことは、score> = goalを解決してplayer.scoreに追加することです。つまり、エラーです。 –

答えて

3

操作の優先順位はありますか?試してみてください:

if ((player.score += score) >= goal) 

それはあなたがどちらか私には必要がありそうです、が: a)は2行にそれを破る:

player.score += score; 
if (player.score >= goal) 

またはb)に行を変更します。

if (player.score + score > goal) 

これは意図的なものですが、これは意図的なことかもしれませんが、player.scoreは> = goalでなければスコアが2回追加され、ifの一部として追加され、elseのボディとして追加されます。

+0

うん、それは操作の優先順位であった、歓喜pal – newbie123

+0

それは2つの行にそれを壊すことははるかに明確です。ある行の変数をインクリメントしてチェックする簡潔なコードを書くことは、将来バグの原因になる可能性があります。 – AlainD

1

これは演算子の優先順位の問題です。比較演算子> =の方が優先順位が高いため、本質的にブール比較score >= goalの結果によってplayer.scoreをインクリメントしようとしています。

括弧を使用すると、これを修正したり簡略化したりできます。

player.score += score; 
if (player.score >= goal) 

あなたは、あなたが同じ行に両方の操作を行うことはできませんここhttps://msdn.microsoft.com/en-us/library/2bxt6kc4.aspx

関連する問題