QBasic/QB64如何清理IF THEN IF阶梯式嵌套结构?
优化QBasic中阶梯式IF嵌套的几种方法
哈哈,我当年刚学QBasic的时候也被这种连续相等判断的问题坑过!确实,QBasic不支持像x = y = z这种链式比较——它会先算y = z得到0或-1(QBasic里真为-1,假为0),再拿x和这个结果比,完全不是我们想要的逻辑。你写的嵌套IF虽然能跑,但太啰嗦了,维护起来也头疼,给你几个优化方案:
方法1:用AND合并所有条件
QBasic支持逻辑运算符AND,可以把所有相等判断合并到一个IF语句里,这样就不用嵌套多层了:
IF sum(1) = sum(2) AND sum(2) = sum(3) AND sum(3) = sum2(1) AND sum2(1) = sum2(2) AND sum2(2) = sum2(3) AND sum2(3) = sum3 AND sum3 = sum4 THEN PRINT "This is a Lo Shu Square, with all sums equaling"; sum(1) ELSE PRINT "This is not a Lo Shu Square." END IF
这样代码一下子清爽很多,所有判断逻辑都集中在一个条件里(如果太长可以拆成多行,QBasic会自动识别),而且只需要一对IF/ELSE/END IF。
方法2:先定义目标值,简化判断逻辑
既然所有值都要等于sum(1),不如先把sum(1)存到一个变量里,然后让其他值都和这个变量比较,可读性会更强:
DIM target AS INTEGER target = sum(1) IF sum(2) = target AND sum(3) = target AND sum2(1) = target AND sum2(2) = target AND sum2(3) = target AND sum3 = target AND sum4 = target THEN PRINT "This is a Lo Shu Square, with all sums equaling"; target ELSE PRINT "This is not a Lo Shu Square." END IF
这种方式的好处是,如果你以后需要调整比较的基准值(比如改成sum(3)),只需要改target = ...这一行就行,不用逐个修改条件里的变量。
方法3:用数组+循环判断(适合扩展场景)
如果以后可能要增加更多需要比较的求和结果,用数组+循环会更灵活,不用每次都加AND条件:
' 把所有需要比较的求和结果放进数组 DIM checkValues(8) AS INTEGER checkValues(1) = sum(1) checkValues(2) = sum(2) checkValues(3) = sum(3) checkValues(4) = sum2(1) checkValues(5) = sum2(2) checkValues(6) = sum2(3) checkValues(7) = sum3 checkValues(8) = sum4 DIM isLoShu AS INTEGER isLoShu = -1 ' QBasic里用-1表示真 FOR i = 2 TO 8 IF checkValues(i) <> checkValues(1) THEN isLoShu = 0 ' 只要有一个不等,标记为假 EXIT FOR ' 提前退出循环,不用继续判断 END IF NEXT i IF isLoShu THEN PRINT "This is a Lo Shu Square, with all sums equaling"; checkValues(1) ELSE PRINT "This is not a Lo Shu Square." END IF
这种方法的优势在于,以后再新增需要比较的值,只需要往数组里多存一个元素,修改循环的上限就行,不用动判断逻辑的核心部分。
这三种方法里,前两种最适合你现在的场景,第三种更适合需要频繁扩展的情况,你可以根据自己的需求选~
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

