Code.org应用中if-else判断异常:始终显示'wrong'如何修复?
问题分析与修复方案
核心问题总结
你的代码存在几个关键问题导致无论猜测对错都显示"wrong":
- 变量名拼写错误导致无法正确获取随机选中的歌曲
- 未保存当前选中歌曲的排名信息,校验逻辑无明确对比目标
- 遍历所有排名的校验逻辑会覆盖正确结果
具体问题与修复步骤
- 变量名拼写错误
在updateScreen2()函数中,你使用了filterSongList和filterArtistList,但实际定义的变量是filteredSongList和filteredArtistList(多了"ed"后缀)。这会导致无法正确读取歌曲数据,甚至引发运行错误。
修复:将函数内的变量名修正为正确的filteredSongList和filteredArtistList。
- 未保存选中歌曲的排名
当前代码选择随机歌曲后,没有记录该歌曲对应的排名,导致校验时无法针对当前显示的歌曲进行判断,而是遍历所有排名,最后一次循环的结果会覆盖之前的正确判断。
修复:添加全局变量selectedRank存储当前选中歌曲的排名,在updateScreen2()中完成赋值。
- 校验逻辑错误
原代码遍历整个rankList,每一次循环都会更新文本框内容。即使找到匹配的排名,后续不匹配的循环会将文本重新设置为"wrong",最终显示的永远是最后一次循环的结果。
修复:直接对比用户猜测的排名和selectedRank,无需遍历整个列表。
- 冗余的过滤函数
randomSongFunction()的逻辑是将所有歌曲复制到过滤列表,过滤条件永远为真,完全没有必要。可以简化逻辑,直接从原列表中随机选择歌曲。
修复:删除冗余的过滤函数,直接在updateScreen2()中处理随机选择逻辑。
修正后的完整代码
// 全局变量存储数据和选中的排名 var songList = getColumn("Viral 50 USA", "Track Name"); var artistList = getColumn("Viral 50 USA", "Artist"); var rankList = getColumn("Viral 50 USA", "Position"); var selectedRank; // 存储当前选中歌曲的排名 // 显示随机歌曲并保存其排名 function updateScreen2() { var index = randomNumber(0, songList.length - 1); setText("artistOutput", artistList[index]); setText("songOutput", songList[index]); selectedRank = rankList[index]; // 保存当前歌曲的排名 } // 页面切换事件 onEvent("startButton", "click", function() { setScreen("screen2"); }); onEvent("yesButton", "click", function() { setScreen("screen3"); }); onEvent("noButton", "click", function() { setScreen("screen1"); }); onEvent("homeButton", "click", function() { setScreen("screen1"); }); // 选择随机歌曲按钮事件 onEvent("chooseButton", "click", function() { updateScreen2(); }); // 校验猜测结果按钮事件 onEvent("checkButton", "click", function() { var guessRankNum = getProperty("dropdown", "value"); // 直接对比用户猜测和选中歌曲的排名 if (guessRankNum == selectedRank) { setText("answerOutput", "correct!"); } else { setText("answerOutput", "wrong"); } });
内容的提问来源于stack exchange,提问作者noemi
相关产品推荐
相关产品推荐

