debugging - applab 中的调试问题
问题描述
我目前正在 appLab 上为我的 CS 期末考试创建一个测验创建者,尽管我的代码中的一些 onEvent 行不断重复,但我的大部分代码都在工作,即使我在那里没有循环。我在我的程序中多次调用了该函数,这可能是它出现故障的原因。我尝试重构代码并将函数拆分为 2 个较小的函数,一个用于处理声明变量,另一个用于对屏幕进行更改。主要问题是 onEvent 循环中的代码在重复,因此我无法添加计数器来计算用户提出的正确或错误问题的数量。我非常困惑,因为过去几天我一直在尝试修复这个错误。首先,它似乎正在工作,但是当您在单击答案之前放慢代码速度时,您会在 onEvent 行中的 quiz 函数中看到问题。非常感谢你帮助我!
如果您想引用代码,这里是我的项目的链接(由于某种原因,代码的格式在堆栈溢出中不起作用) https://studio.code.org/projects/applab/bzlJBCafMhrd-LAGoqro3nXw8hQ7tJBLxj-N3In9kwo`在此处输入代码`
解决方案
即使我在那里没有循环,我的代码的某些 onEvent 行也会不断重复
答案可以在这个Code.org 论坛帖子中找到。关键声明是:
- 当您调用 onEvent() 时,它会在后台创建一个新的事件处理程序来响应事件。一旦创建了事件处理程序,就无法摆脱它。当您重新启动游戏时,旧的事件处理程序仍在后台挂起,并创建了新的事件处理程序......
在您的情况下,重新启动游戏意味着只需进入下一个测验屏幕,调用function quiz()
,其中您调用 onEvent()。在第二次运行时quiz()
创建第二个事件处理程序,因此回调函数被调用两次,在第三轮测验中被调用三次,依此类推。因此,为避免这种情况,不要为同一个 UI 元素事件重复调用 onEvent()。
推荐阅读
- vb.net - 还有什么其他方法可以通过 asp.net 将连接字符串放入 vb web 表单中,不包括驱动器 C 或 D 我的数据库是 ms access 2007
- node.js - 从手动创建的格式计算 nodejs 中的时间差
- c# - System.Security.Cryptography.CryptographicException:'输入数据不是一个完整的块。' C#
- laravel - 我想对使用 laravel 分配的同一用户进行验证
- c# - 从datagridview到图表C#将第一行加倍
- vue.js - 如何在 vue 的其他地方渲染 div/component?
- php - PHP 中的 curl 是否会向客户端显示辅助 IP 地址的地址?
- apache-nifi - 在 Nifi 中修改 JSON 键值对
- kubernetes - 如何在 Kubernetes 中公开服务?
- python - 使用 Python boto3 读取 JSON 文件