我目前正在阅读“ Head First:Javascript”,并且有一个创建“战舰”的任务。我按照每个步骤进行操作,我的代码看起来完全是本书中的代码,但是我的代码始终生成相同的数字,每次都应加1。这意味着,如果生成数字2,则以下两个数字应分别为3和4(3个位置= 1艘船)。我希望它在0到4之间(因为如果是4,则5和6也在栅格上。)用户应该选择一个介于0到6之间的数字。
随机数始终为:0、1和1。 这是代码:
var randomLoc = Math.floor(Math.random()) * 5;
var location1 = randomLoc;
var location2 = location1++;
var location3 = location2++;
var guess;
var hits = 0;
var guesses = 0;
var isSunk = false;
alert(location1 + " " + location2 + " " + location3); //To show the numbers for debugging.
while (isSunk == false) {
guess = prompt("Anlegen, Zielen Feuer! (Geben Sie eine Zahl zwischen 0 und 6 ein) :");
if (guess < 0 || guess > 6) {
alert("Diese Zahl (sofern es eine war) liegt nicht auf dem Raster")
} else {
guesses += 1;
if (guess == location1 || guess == location2 || guess == location3) {
alert("Treffer!")
hits += 1;
if (hits == 3) {
isSunk = true;
alert("Schiff versenkt!");
}
} else {
alert("Daneben!");
}
}
}
var stats = "Sie haben " + guesses + " Versuche gebraucht, um das Schiff zu versenken. " +
"Das entspricht einer Genauigkeit von " + (3 / guesses) * 100 + "%";
alert(stats);
答案 0 :(得分:1)
因为Math.random()
生成一个介于0到1之间的数字。当您Math.floor(Math.random())
时,总是得到0作为输出。您真正想要的是Math.floor(Math.random()*5)
。
Math.random()*5
会将输出范围缩放到0到5。因此,下标功能实际上将按预期方式工作,将0到4(包括0和4)之后的小数部分截断。
将来测试的一种方法是通过F12在浏览器中使用控制台。您可以一点一点地测试代码,看看哪里出错了,以调试脚本。
答案 1 :(得分:0)
这里的数字生成实际上有两个问题:
var randomLoc = Math.floor(Math.random()) * 5;
var location1 = randomLoc;
var location2 = location1++;
var location3 = location2++;
Math.random()
返回0到1之间的数字,因此Math.floor(Math.random())
将始终为0
。该行应为Math.floor(Math.random() * 5)
。
第二,++
运算符会递增变量,并且在其他所有变量之后这样做。因此,当您说location2 = location1++
时,您的意思是“分配当前值location1
至location2
,然后递增location1
。”
这些行应该是:
var location1 = randomLoc;
var location2 = location1 + 1;
var location3 = location2 + 1;