【问题标题】:Can't save the value of JavaScript prompt() function无法保存 JavaScript prompt() 函数的值
【发布时间】:2015-11-05 17:04:54
【问题描述】:

我是 JavaScript 新手,我正在构建一个非常基本的战舰程序,但我注意到如果我尝试将 prompt() 函数的值保存到多变的。这是我的代码:

var location1 = 3;
var location2 = 4;
var location3 = 5;


var hits = 0;
var guesses = 0;
var guess;

var isSunk = false;


while (isSunk == false){
guess = prompt("Ready, aim, fire! Enter a number 0-6");
if (guess < 0 || > 6){
    alert("PLease enter a valid cell number!");
}
else{
    guesses = guesses + 1;

    if (guess == location1 || guess == location2 || guess == location3){
        alert("Hit!");
        hits = hits + 1;
        if (hits == 3){
            isSunk = true;
            alert("You sank my battleship!");
        }
        else{
            alert("Miss!");
        }
    }
}
}
var stats = "You took " + guesses + " guesses to sink the battleship, " + "which means your shooting accuracy was " + (3/guesses);
alert(stats);

现在,我认为加载浏览器时没有出现提示的原因是我试图将提示的值设置为变量guess,因为以下代码执行没有问题:

 var location1 = 3;
 var location2 = 4;
 var location3 = 5;

 var hits = 0;
 var guesses = 0;
 var guess;

 var isSunk = false;


 while (isSunk == false){
   prompt("Ready, aim, fire! Enter a number 0-6");
   isSunk = true;
}
var stats = "You took " + guesses + " guesses to sink the battleship, " + "which means your shooting accuracy was " + (3/guesses);
alert(stats);

有人可以帮我理解我的代码有什么问题吗?在此先感谢:)

【问题讨论】:

  • 条件句中有错字:if (guess &lt; 0 || &gt; 6){。正确的版本是if (guess &lt; 0 || guess &gt; 6){。鉴于这样的语法错误,脚本的其余部分将无法运行。您的 JavaScript console 应该有一条错误消息指出您的语法错误。
  • 您需要学习在调试控制台中查找脚本错误。这将准确地显示您何时在代码中出现导致异常并停止执行的错误。任何时候你对某些东西为什么不工作感到困惑时,首先在调试控制台中查看错误。

标签: javascript html prompt


【解决方案1】:

您正确使用了prompt()
问题出在下面一行:
if (guess &lt; 0 || &gt; 6) {
应该是
if (guess &lt; 0 || guess &gt; 6){

在调用 prompt() 之前,此错误正在停止 JS。 将来,您应该使用浏览器控制台来调试您的代码。您会看到此错误。
如果您使用 Firefox,您可以使用Ctrl+Shift+K 打开它。对于 Chrome,它是 Ctrl+Shift+J

当您解决了这个问题后,您会看到其余代码没有语法错误,但没有做完全正确的事情(例如,我可以多次点击同一个位置)。逻辑错误并不容易修复(您没有调试器可以帮助您)。所以...祝你好运!
好吧,别担心你的情况不会很难修复。

【讨论】:

  • 如何使用 Safari 打开控制台?我知道当我没有弹出对话框时,我可以右键单击并选择“检查元素”,我可以以这种方式访问​​控制台。但是当我弹出一个对话框时,我无法以这种方式访问​​控制台。
  • @Kiyana Ctrl+Shift+C 根据:webmasters.stackexchange.com/a/77337(我自己不使用 Safari)
【解决方案2】:

+1 对上述评论。

此外 Kiyana,当您运行代码时,您会注意到只要用户的输入不是 6,alert("Hit!") 和 alert("Miss!") 都是出现。

这与代码的顺序有关:

if (guess == location1 || guess == location2 || guess == location3){
    alert("Hit!");
    hits = hits + 1;
    if (hits == 3){
        isSunk = true;
        alert("You sank my battleship!");
    }
    else{
        alert("Miss!");
    }
}

这是您希望上述代码出现的顺序。

伪代码:

  1. 如果用户的猜测是 3、4 或 5(位置 1、位置 2 或位置 3),那么我们要提醒“命中”

  2. 然后,将 1 个计数器添加到命中变量(命中 = 命中 + 1)

  3. ELSE - 那么我们要提醒“小姐”。

  4. 评估此猜测后,我们要检查命中计数器是否已达到 3。

a) 如果没有,那么我们循环遍历所有代码。

b) 如果有,那么我们想让 isSunk 等于 true(以停止循环)并警告“你击沉了我的战舰!”

代码应该是这样的:

var location1 = 3;
var location2 = 4;
var location3 = 5;


var hits = 0;
var guesses = 0;
var guess;

var isSunk = false;


while (isSunk === false){
guess = prompt("Ready, aim, fire! Enter a number 0-6");

if (guess < 0 || guess > 6){
    alert("Please enter a valid cell number!");
} else{
    guesses = guesses + 1;

if (guess == location1 || guess == location2 || guess == location3){
    alert("Hit!");
    hits = hits + 1;
    }else{
        alert("Miss!");
    }
    if (hits == 3){
        isSunk = true;
        alert("You sank my battleship!");
    }
}
}
var stats = "You took " + guesses + " guesses to sink the battleship, " +  "which means your shooting accuracy was " + (3/guesses);
alert(stats);

希望这会有所帮助!

【讨论】:

  • 非常感谢您的帮助!!我选择以稍微不同的顺序编写我的条件语句,我想看看这是否也有效:code while (isSunk == false){guess = prompt("准备好,瞄准,开火!输入数字 0 -6"); if (guess 6){ alert("请输入有效的手机号码!"); } else{ 猜测 = 猜测 +1; if (guess == location1 ||guess == location2 ||guess == location3){ alert("命中!");命中 = 命中 + 1;如果(命中 == 3){ isSunk = true; alert("你击沉了我的战舰!"); } } else{ alert("Miss!"); } } } code
  • 请原谅,我不完全确定如何在评论中正确格式化代码!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多