2017-01-24 60 views
-1

我使用Microsoft Visual C#:爲什麼我總是得到字符'?'當在int和char之間轉換時?

Console.Write((char)((int)sentence[i] + random.Next(2) == 0 ? 1 : -1)); 

我想Console.Write炭我有一句話當前指數[I],但隨機要麼得到它的上面或下面的字符。然而,我總是得到char'?'。 爲什麼?

+0

你錯過了括號。你的代碼正在執行'if sentence [i] + rnd == 0'而不是'sentence [i] + if(rnd){} ...'。改變代碼爲:'Console.Write((char)((int)sentence [i] +(random.Next(2)== 0?1:-1)));' – Rob

+0

哦,當然!謝謝你,這讓人感覺很有意思。 – PlayCreatively

回答

1

您正遇到操作順序問題。嘗試添加括號:

Console.Write((char)((int)sentence[i] + (random.Next(2) == 0 ? 1 : -1))); 

沒有括號,它是做:

(句子[I] + random.Next(2))== 0? 1:-1

...您可以看到總是以1或-1結果。給定ASCII字符範圍,幾乎肯定總是導致-1,這顯然不是可打印的字符,因此輸出爲?

+0

感謝您的詳細。當他們有邏輯推理時,它幫助我記住失敗。 – PlayCreatively