使用for循环捕获javascript中的无效输入,if else和prompt

时间:2015-07-18 11:48:24

标签: javascript

我似乎无法理解为什么我的代码无效。我想要做的是在用户输入不在我的数组中的数据时捕获错误。

 var userPrompt = prompt("Enter which car you like: ");
 var cars = ["Ferrari", "Ford", "Bugatti", "Toyota", "Honda", "Jaguar"];

 for (var x = 0; x < cars.length; x++) {
     console.log(cars[x]);
     if (cars[x] === userPrompt) {
         break;
     } else {
         console.log("err");
         break;
     }
 }

6 个答案:

答案 0 :(得分:2)

我会将代码重写为:

var userPrompt=prompt("Enter which car you like: ");
var cars=["Ferrari","Ford","Bugatti","Toyota","Honda","Jaguar"];
var x = cars.indexOf(userPrompt);

答案 1 :(得分:1)

因为循环在第一次运行时退出。 breakif内都有else,因此如果它们相等或不相同,则循环将不会继续。

试试这个:

console.log(cars.indexOf(userPrompt) != -1);

或者如果你真的想要一个循环:

var found = false;
for (var x=0; x < cars.length; x++) {
    if (cars[x] == userPrompt) {
        console.log("found!");
        found = true;
        break;
    }
}
if (!found)
    console.log("error!");

逻辑:

  1. 我想知道userPrompt是否在cars
  2. 我必须检查每个元素是否匹配。
  3. 对于从0到汽车长度的每个元素 - 1执行:
  4. 这辆车和用户想要的一样吗?
    • 如果是,我们发现它,我们不需要检查其他元素,打破循环。
    • 如果不是,我们需要检查下一个元素。不要在这里打破循环,因为我没有检查剩余的汽车,我不知道他们是否正确。重复步骤4,直到我检查完所有元素。
  5. 我找到了吗?
    • 如果是,请打印“找到!”。
    • 如果不是,用户的车不在汽车列表中,则打印“错误!”。

答案 2 :(得分:0)

问题是你在else块中有break个关键字,如果数组匹配中的第一个值失败,则不允许脚本搜索数组中的下一个值。您还有语法错误,因为您在if阻止

之后添加了无效大括号
if(cars[x]===userPrompt){
        break;}{ //<-- note the opening brace

&#13;
&#13;
var userPrompt = prompt("Enter which car you like: ");
var cars = ["Ferrari", "Ford", "Bugatti", "Toyota", "Honda", "Jaguar"];

for (var x = 0; x < cars.length; x++) {
  if (cars[x] === userPrompt) {
    break;
  } //{// syntax error
  else {
    console.log("err");
    //break; //halts further search
  }
}
alert(x === cars.length ? 'No match found !' : 'Match found');
&#13;
&#13;
&#13;

答案 3 :(得分:0)

不需要for循环。您可以将代码更新为以下

if(cars.indexOf(userPrompt) !== -1){    
    // your code
} else {
    console.log("err");
}

答案 4 :(得分:0)

使用当前逻辑,只会比较数组中的一个(第一个)值,如果找不到匹配,则会打印错误。

它在else语句中的原因是,你的else语句是循环的,如果找不到匹配,它将进入else部分。这就是if-else的工作原理。

而是尝试下面的代码。我添加了一个标志来检查是否找到匹配。

var userPrompt=prompt("Enter which car you like: ");
var  cars=["Ferrari","Ford","Bugatti","Toyota","Honda","Jaguar"];
var isMatchFound = false;

for(var x=0; x<cars.length; x++) {
  console.log(cars[x]);
  if(cars[x]===userPrompt){
    isMatchFound = true;
    break;
  }
}
if(!isMatchFound)
  console.log("Match not found!");

答案 5 :(得分:0)

尝试跟随循环中断第一次自己找不到汽车

var userPrompt=prompt("Enter which car you like: ");
var  cars=["Ferrari","Ford","Bugatti","Toyota","Honda","Jaguar"];
var carFound = false;
for(var x=0; x<cars.length; x++){
    console.log(cars[x]);
        if(cars[x]===userPrompt){
            carFound = true;
            break;
         }
    }

   if(!carFound){
     console.log('err');
   }