JavaScript战舰Math.random-始终生成相同的数字

时间:2018-11-30 15:24:28

标签: javascript

我目前正在阅读“ 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);

2 个答案:

答案 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++时,您的意思是“分配当前值location1location2,然后递增location1。”

这些行应该是:

var location1 = randomLoc;
var location2 = location1 + 1;
var location3 = location2 + 1;