JavaScript - 我做错了什么?

时间:2012-02-09 22:01:22

标签: javascript

又一次我需要帮助的任务。我只需要检查的工作,并告诉我为什么第一个数组中的项目无法正常工作到用户输入的相应数字。

路线:

创建名为a5_yourname.html的新文件。使用以下步骤编写一个脚本,提示用户输入两个数字。一种是给面包类型选择另一种选择三明治的馅料类型。

使用这些选项显示一个语句,该语句将从透视图数组中提取正确的面包名称并填充,以向用户发送警报消息。使用步骤中描述的变量名称和消息。

一个。创建一个名为“breadArray”的数组。在breadArray中输入以下值:白色,小麦,黑麦,包裹

B中。创建名为“fillingArray”的第二个数组。在fillingArray中输入以下值:火腿,火鸡,鸡蛋沙拉,牛肉,花生酱

℃。使用提示告诉用户有哪些类型的面包,给每个面包一个数字,然后让他们按照数字选择面包。

像: 面包选择是:1为白色,2为小麦,3为黑麦,4为包裹。 请使用1到4的数字为您的三明治选择面包类型。

d。使用“if” - “else”语句和“isNaN”函数来确定用户是否输入了数字。测试数量是否在范围内。如果他们没有输入有效号码,则会显示一个警告消息框,要求他们输入一个号码。在步骤“F”之后重复此步骤。

电子。保存名为“breadChoice”的变量中给出的数字。

F。使用提示告诉用户有哪些类型的填充物,每个填充物都有一个数字,并要求他们按编号选择填充物。 喜欢: 填充选择包括:1个用于火腿,2个用于火鸡,3个鸡蛋沙拉,4个牛肉和5个花生酱 请使用1到5的数字选择三明治的馅料类型。

-G。保存名为“fillingChoice”的变量中给出的数字。

小时。如果用户输入了有效数字,则使用用户提供的数字从适当的数组中提取正确的面包并填充三明治,并使用document.write语句显示以下消息:

“我会点名”填写“面包名称”三明治午餐“。 示例:如果用户输入1表示面包,输入2表示填写,则应显示以下消息: 午餐时,我会点一份小麦三明治火腿。

我的代码:
    

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>Assignment 5: Arrays</title>

    <script type="text/javascript">

        // Variable Declarations

            var breadArray = new Array ("white","wheat","rye","wrap");
            var fillingArray = new Array ("ham","turkey","egg salad","beef","peanut butter")
            var breadChoice;
            var fillingChoice;

        // Assignments

            breadChoice = Number(prompt("Bread choices are: 1 for White, 2 for Wheat, 3 for Rye, or 4 for a Wrap. Please select the type of bread for you sandwich using a number from 1 to 4"),0)-1;
            fillingChoice = Number(prompt("Filling choices are: 1 for ham, 2 for turkey, 3 egg salad, 4 beef, or 5 peanut butter. Please select the type of filling for your sandwich using a number from 1 to 5"),0)-1;

        // Calculations

            // none


        // Output


        if (breadArray[breadChoice] && fillingArray[fillingChoice])
        {
         alert("Thanks! I am now calculating your sandwich order.");
        }
        else
        { 
            alert("Sorry. You did not enter a correct numeric value, please try again!");
        }



        document.write("I will order you a &nbsp;" +fillingArray[fillingChoice] +"&nbsp; on &nbsp;" +breadArray[breadChoice] +"&nbsp; sandwich for lunch");

    </script>

</head>

<body>

</body>

3 个答案:

答案 0 :(得分:2)

Javascript中的数组(与许多但不是全部编程语言一样)开始编号索引0处的第一个元素,而不是1。

答案 1 :(得分:2)

数组从0开始,而不是1.因此,如果我为白面包输入1,则需要从中减去一个以获得数组中的正确位置:

document.write("I will order you a &nbsp;" +fillingArray[fillingChoice-1] +"&nbsp; on &nbsp;" +breadArray[breadChoice-1] +"&nbsp; sandwich for lunch");

答案 2 :(得分:2)

  

错误是当我输入有效数字时有时会说填充选项未定义。

如果用户在4被推荐时输入breadChoice,则会发生这种情况,因为breadArray[4]实际上是未定义的(第四个也是最后一个元素是breadArray[3])。

为防止这种情况发生,您可以使用:

breadChoice = Number(...) - 1;
  

我认为问题实际上是我的if,else语句。

不,但它不是正确的。您的if-else语句将在第一种和第二种情况下执行alert("Thanks!...);,但在每种情况下只有一种情况得到验证。我建议使用

if (breadArray[breadChoice] && fillingArray[fillingChoice])
    alert("Thanks! I am now calculating your sandwich order.");
else 
    alert("Sorry. You did not enter a correct numeric value, please try again!");

只会测试是否定义了breadArray[breadChoice]fillingArray[fillingChoice]