我正在尝试制作一个刽子手游戏,一开始游戏会询问用户这个词。一旦有了单词,它就会使用for循环在一个数组中逐个填充单词字母。不幸的是,由于某种原因总是未定义最后一个数组元素。 代码(JS):
for(i=0;i<word.length;i++)
{
if(i == word.length - 1)
{
wordLettersLeft = word.length;
$("#cEText").removeAttr("style");
$(".characterEnter").removeAttr("style");
$("#gBtn").text("Lopeta");
gameStarted = true;
pcArrayLength = pcArray.length;
lives = 4;
alert("Peli alkaa! Sinulla on " + lives + " yritystä jäljellä.");
alert("Vihje: " + hint);
alert("Sinulla on vielä " + wordLettersLeft + " arvattavaa kirjainta jäljellä.");
}
else
{
pcArray.push(word[i]);
}
}
答案 0 :(得分:1)
让我们说某人输入“&#34;测试&#34;”这个词。对于i === 3
这是最后一次迭代,您输入了if
子句,并且您错过了else
子句,这是您正在执行的操作:
pcArray.push(word[i]);
无论您是if
还是else
,无论如何都要执行此操作,因此您可以放弃else
条款并执行此操作反正。
答案 1 :(得分:1)
这有一个非常简单的原因:您没有在pcArray
添加最后一个字母。让我们假设我们的单词是'bird'(因为bird 是一个单词)。你的代码将通过字母b,i和r并将它们推送到你的数组,到目前为止一切顺利。但是当它到达d时,它位于word.length-1
位置 - 因为数组长度从1开始但索引从0开始。你的if
语句阻止它将最后一个字母推到单词上。有两种解决方案:
首先,您只需删除else
声明:
for(i=0;i<word.length;i++){
if(i == word.length - 1){
wordLettersLeft = word.length;
$("#cEText").removeAttr("style");
$(".characterEnter").removeAttr("style");
$("#gBtn").text("Lopeta");
gameStarted = true;
pcArrayLength = pcArray.length;
lives = 4;
alert("Peli alkaa! Sinulla on " + lives + " yritystä jäljellä.");
alert("Vihje: " + hint);
alert("Sinulla on vielä " + wordLettersLeft + " arvattavaa kirjainta jäljellä.");
}
pcArray.push(word[i]);
}
每次都会推送每一封信!但是,有一种更有效的方法:
for(i=0;i<word.length;i++)
pcArray.push(word[i]);
wordLettersLeft = word.length;
$("#cEText").removeAttr("style");
$(".characterEnter").removeAttr("style");
$("#gBtn").text("Lopeta");
gameStarted = true;
pcArrayLength = pcArray.length;
lives = 4;
alert("Peli alkaa! Sinulla on " + lives + " yritystä jäljellä.");
alert("Vihje: " + hint);
alert("Sinulla on vielä " + wordLettersLeft + " arvattavaa kirjainta jäljellä.");
这样您只需执行一次初始代码 ,而不是每次都检查if
。你知道你的循环只会在有字母的情况下运行,所以为什么甚至打扰if?
正如@Shilly在评论中提到的那样,你可以通过这样做完全放弃for循环:
pcArray = word.split('');
答案 2 :(得分:0)
循环的最后一步不会执行pcArray.push(word[i]);
。如此明显,最后的价值就不见了。
但是如果你想将一个字符串转换成一个数组,那就这样做:
var pcArray = word.split('');