0

所以对于学校来说,我正在制作一个带有小基础的项目,想法很简单,就像我的问题一样。我正在制作一种赌博模拟器。

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.")

我面临的问题是,我的 var1 100 发生的任何事情都会被添加到我的积分中,即使 var1 是例如 1 或 10。

我问过我的老师,他无法解释我出了什么问题。我是什么做的?

提前致谢

4

1 回答 1

0

你有三个问题。

  1. 正如 +koceeng 所建议的,Small Basic 不支持“x < y < z”结构。更糟糕的是 Small Basic 的故障安全趋势,这意味着它会编译,但我不会给出预期的结果。这个逻辑的正确结构是“x < y and y < z”。换句话说,所有逻辑都是二进制的,比较只能两两发生。
  2. 当你从 if 到 if-else 时,你有一个逻辑错误。"5 < var1 and var1 < 9" 结合 "9 < var1 and var1 < 10" 有一个洞。九个退出逻辑并且 if 语句永远不会匹配它。5 也会发生同样的事情。正确的组合在逻辑的一端或另一端使用等号:“9 <= var1 and 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.")
于 2017-03-31T13:09:55.617 回答