
2.3 C语言测试逻辑修改
2.2节基本完成了添加D选项以及将心理学题库更换成C语言题库的任务。但经过调试运行发现还存在一些小问题,这些小错误的出现正是因为代码中存在一些细小的逻辑问题。通过修改代码能够很好地拉近初学者与小程序开发的距离,并且进一步熟悉小程序的代码构成。本节主要针对test页面存在的几个问题提出了解决方案。
2.3.1 问题一:第一题与第二题相同
单击“开始测试”按钮,进行C语言习题测试,会发现第一题与第二题相同,如图2-25和图2-26所示。

图2-25 第一题题目信息

图2-26 第二题题目信息
在test.js文件中,data数组中的变量index初始值为0,在test.wxml文件中使用变量{{index+1}}来表示题目序号,题目序号即从1开始显示;另外data数组中的变量questionDetail与answerA、answerB、answerC、answerD的初始值均为app.js文件的question数组的第一个元素,即question[0],因此第一题显示的是题库中的第一道题。
当单击其中一个选项时,比如单击A选项时,触发事件处理函数answerClickA(),先看一下该函数中的部分逻辑,代码如下:

上述代码中,使用this.setData将index的值加1,并给realIndex赋值,这里要注意的是,在this.setData({})语句中,index的值为0,执行完该语句后,index的值才变为1,因此realIndex=list[0]=0,即单击A选项后,变量questionDetail与answerA、answerB、answerC、answerD的值仍然为question数组的第一个元素,而此时index+1的值为2,第二题仍为题库中的第一题。
修改方法如下:
(1)如图2-27所示,将index的初始值改为1;

图2-27 修改index的初始值为1
(2)如图2-28所示,选择test.wxml文件,将第3行代码中的index+1改为index,即把+1去掉。

图2-28 改变wxml文件题目序号
2.3.2 问题二:无法完成第20题的做答
测试过程中,会发现当完成第19题后,第20题一闪而过,就直接跳转至result页面。最后测试结果页面累计只选择了19次,如图2-29所示。

图2-29 测试结果页面
由于在单击完第19题的选项后,this.data.index变为20,来到了if判断语句,由于满足判断条件this.data.index=20,执行if语句内容,即执行wx.redirectTo路由带参跳转至result页面,显示最终结果,因此没有选择第20题的余地,如图2-30所示。

图2-30 test.js中的if语句
修改方法如下:将整个if语句移至this.setData使得index+1之前,如图2-31所示。这样一来,当index=19时,不满足if语句中的条件,不执行跳转,然后再执行this.setData使得index=20,那么当单击第19题的选项时,会显示第20题。

图2-31 改变if语句的位置
修改完后单击“编译”按钮,重新测试代码,发现在20题做完后产生报错,原因是当选择第20题时,realIndex的值变为20,而question[20]不存在,即题库中没有第21题的题目信息。修改方法如图2-32所示,即添加一个if判断语句,判断只有当index<20时才更新test中题目信息的视图,当index=20时,不满足条件,则不更新题目信息,跳转至result页面。

图2-32 添加if判断
需要注意的是,对于以上两个逻辑问题均只修改了answerClickA部分的代码,需要对answerClickB、answerClickC、answerClickD部分相应的代码进行同样的修改。
思考题:现在做完全部题后的页面显示的结果仍是心理学测试的结论,如何才能修改成C语言题目做对或做错的题数统计结果?答案将在2.4节中揭晓。