做JavaScript分配:我需要创建一个游戏,用户尝试从1-6中正确猜测4个随机数字。例1、3、2、4或1、6、5、3等。计算机应该分析它并告诉玩家(a)他或她猜对的数字中有多少是正确的,但在错误的位置,以及(b)有多少猜对的数字是正确的,在正确的位置。
下面的例子(bold =用户输入)):
欢迎来到Mastermind
请输入您的四个数字猜测(空格分隔):2 4 31 1
你有2个正确的号码和1个正确的位置
请输入您的四个数字猜测(空格分隔):4 5 3 2
正确!
你是一个策划者!
然而,在我的代码中,当我计算错误位置和正确位置的正确数字的数量时,控制台输出错误的数字。我复制了correctAnswerList和userGuessList。因此,如果用户的猜测与正确答案相符,我就会更改这些副本中的数字(超出1-6的范围),这样它们就不会被重新计算。我试着在谷歌上搜索什么可能是我的问题,因为我是新的JavaScript。读一些关于async for循环的东西,但没有真正理解。代码如下,提前感谢!!
function checkingCorrect(userGuessList, correctAnswerList){
var correctLocation = 0;
var correctNumber = 0;
var copyUserGuessList = userGuessList;
var copyCorrectAnswerList = correctAnswerList
for(var i = 0; i < 4; i++){
if(userGuessList[i] == correctAnswerList[i]){
correctNumber++
}
for(var x = 0; x < 4; x++){
if(copyUserGuessList[i] == copyCorrectAnswerList[x]){
copyUserGuessList[i] = -1;
copyCorrectAnswerList[x] = 0;
}
}
if(copyUserGuessList[i] == -1){
correctNumber++; }
}
correctNumber = correctNumber - correctLocation;
return([correctNumber, correctLocation]);
}
-
要创建数组的副本,您不能简单地重新分配它们的引用(
var copyUserGuessList = userGuessList;
),相反,您应该创建新的数组,这可以通过使用数组括号内的扩展语法(var copyUserGuessList = [...userGuessList];
)轻松完成。 -
在
if(userGuessList[i] == correctAnswerList[i]){ correctNumber++ }
处增加correctNumber
应改为增加correctLocation
,从而得到if(userGuessList[i] == correctAnswerList[i]){ correctLocation++ }
。
生成的代码应该如下所示:
function checkingCorrect(userGuessList, correctAnswerList){
var correctLocation = 0;
var correctNumber = 0;
var copyUserGuessList = [...userGuessList];
var copyCorrectAnswerList = [...correctAnswerList];
for(var i = 0; i < 4; i++){
if(userGuessList[i] == correctAnswerList[i]){
correctLocation++
}
for(var x = 0; x < 4; x++){
if(copyUserGuessList[i] == copyCorrectAnswerList[x]){
copyUserGuessList[i] = -1;
copyCorrectAnswerList[x] = 0;
}
}
if(copyUserGuessList[i] == -1){
correctNumber++; }
}
correctNumber = correctNumber - correctLocation;
return([correctNumber, correctLocation]);
}