2012-02-09 155 views
-1

又一次我需要帮助的任务。我所需要的仅仅是检查过的工作,并告诉我为什么第一个数组中的项目无法正确工作到用户输入的相应数字。JavaScript - 我做错了什么?

路线:

创建a5_yourname.html命名为新的文件。使用下面的步骤编写一个将提示用户输入两个数字的脚本。一个人会选择另一种选择的面包类型作为三明治。

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

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

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

C.使用提示告诉用户什么类型的面包,给他们每个数字,并要求他们选择面包由数字。

喜欢: 面包的选择是:白色1,小麦2,黑麦3和包装4。 请使用从1到4的数字来选择您的三明治的面包类型。

D.使用“if” - “else”语句和“isNaN”函数来确定用户是否输入了数字。测试数字是否在范围内。如果他们没有输入有效的号码,则会显示一个提示消息框,要求他们输入一个号码。在步骤“F”之后重复此步骤。 E.保存一个名为“breadChoice”的变量中给出的数字。

F.使用提示告诉用户有哪些类型的馅料,给他们每个号码,并要求他们选择填充数字。 喜欢: 灌装选择是:1火腿,2为火鸡,3蛋色拉,4牛肉,和5花生酱 请选择使用数字1为你的三明治填充的类型5.

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

H.如果用户输入了一个有效的数字,那么使用用户给出的数字来提取正确的面包并从适当的数组中填充三明治,并使用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> 

+1

你会得到什么错误? – scottm 2012-02-09 22:04:18

+0

错误在于,当我输入有效数字时,它有时会说填充选项未定义。我认为问题是我的if,else语句。我想也许我应该删除警报,结合前两个ifs并添加文件写入,如果它只输出三明治顺序,如果用户输入正确的数字。 – StephanieKay 2012-02-09 22:08:11

回答

2

的错误是,它有时说未定义为馅的选择,当我输入一个有效的数字。

如果用户propmted为breadChoice时进入4将发生这种情况,因为breadArray[4]是有效未定义(第四和最后一个元素是breadArray[3])。

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

breadChoice = Number(...) - 1; 

我认为这个问题是我的,如果,否则实际的语句。

不,但它并不正确。您的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]定义。

+0

好吧,但如果他们那么不要输入一个有效的数字? – StephanieKay 2012-02-09 22:19:06

+0

'breadArray [“废话”]是'undefined',所以'if'条件是错误的,它会提示* Sorry ... *。这比数字比较好得多。如果有人进入'2.5'? – Dennis 2012-02-09 22:20:48

+0

好的,谢谢!对不起,我是这个品牌的新手。 – StephanieKay 2012-02-09 22:22:31

2

阵列在Javascript中(就像很多,但不是所有的编程语言)开始在索引0,而不是1

+0

正确,但第二个数组是正常的。我知道索引编制从零开始,但是当用户对白面包说1时,应该知道使用0作为数组,并且作为回报,输出第一个索引(零) – StephanieKay 2012-02-09 22:06:18

+1

因此,使用'breadChoice = Number(... ) - 1;'或'breadArray [breadChoice - 1]'。 – Dennis 2012-02-09 22:07:42

+0

或者,提示用户'“0代表白色,1代表小麦......”。当你问索引1时,Javascript不可能“知道”你确实需要索引0。 – 2012-02-09 22:09:19

2
编号的第一个元素

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

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