2017-03-23 99 views
0

所以對於我正在做一個小基礎項目,想法很簡單,就像我的問題。我正在製作一種賭博模擬器。小基本if語句

ready: 
TextWindow.WriteLine("Do you want to bet? yes(1) or no(2).") 
answer = TextWindow.ReadNumber() 
If answer = 1 Then 
    Goto start 
Else 
    Goto ready 
    EndIf 
    start: 
TextWindow.WriteLine("Ok lets go.") 
points = 100 
var1 = Math.GetRandomNumber(10) 
If 5 < var1 < 9 Then 
    points = points + 100 
ElseIf 9 < var1 < 10 then 
    points = points + 200 
Elseif 1 < var1 < 5 then 
    points = points - 100 
EndIf 

TextWindow.WriteLine("You rolled " + var1 + ". You now have " + points + " points.") 

問題IM面是,無論發生什麼事我VAR1 100被添加到我的觀點,即使Var1爲例如1或10.

我問過我的老師,他不能向我解釋什麼是錯的。 我該怎麼辦?

在此先感謝

+0

問題是'轉到ready'。沒有'ready:'塊,所以代碼不會跳轉,'points = 100'會一直執行。祝你好運,快樂編程! –

+0

在第一行不是'ready'塊嗎? – koceeng

+0

我不是一個smallbasic專家,但經過一段時間的搜索後,我想'如果x koceeng

回答

0

您有三個問題。

  1. 正如+ koceeng所建議的,Small Basic不支持「x < y < z」結構。更糟糕的是Small Basic傾向於失敗,這意味着這將會編譯,但我不會給出預期的結果。此邏輯的正確結構是「x < y和y < z」。換句話說,所有的邏輯都是二進制的,比較應該只發生兩次。
  2. 你有一個邏輯錯誤,如果你去if-else。 「5 < var1和var1 < 9」與「9 < var1和var1 < 10」組合在一起有一個洞。從邏輯中刪除9個,並且if語句永遠不會匹配它。同樣的事情將發生在5上。正確的組合在邏輯的一端或另一端使用等號:「9 < = var1和var1 < 10」。
  3. 你的goto循環讓我頭部受傷。除非你正在做一些簡單的事情,比如創建一個無限循環,從程序的底部跳到頂部,你通常應該完全避免goto語句。 while循環是您正在執行的輸入保護類型的更好選擇。

這裏是你的代碼的修正版本:

answer = 2 
While answer <> 1 'Input Protection 
TextWindow.WriteLine("Do you want to bet? yes(1) or no(2).") 
answer = TextWindow.ReadNumber() 
EndWhile 

TextWindow.WriteLine("Ok lets go.") 
points = 100 
var1 = Math.GetRandomNumber(10) 
If 5 <= var1 And var1 < 9 Then 
    points = points + 100 
ElseIf 9 = var1 or var1 = 10 then 
    points = points + 200 
Elseif 1 <= var1 and var1 < 5 then 
    points = points - 100 
EndIf 

TextWindow.WriteLine("You rolled " + var1 + ". You now have " + points + " points.")