2014-09-25 65 views
0

我的循环中有一个问题。我想继续询问用户购买哪种车票类型以及他们想购买多少车票,直到MAX_SEAT_COUNT <= totTickets。我的代码只能运行一次。 MAX_SEAT_COUNT = 2200尽管在Javascript中循环

 do { 
      ticketType = prompt ("Ticket Types: Toddlers = 1 Juniors = 2 Adults = 3 Please enter a ticket type: 1, 2, 3", ""); 
      if (ticketType == 1) { 
       manyToddlers = prompt ("How many toddler tickets are you purchasing? You can only buy 10 tickets per ticket type.", ""); 
      } else if (ticketType == 2) { 
       manyJuniors = prompt ("How many junior tickets are you purchasing? You can only buy 10 tickets per ticket type.", "");     
      } else if (ticketType == 3) { 
       manyAdults = prompt ("How many adult tickets are you purchasing? You can only buy 10 tickets per ticket type.", "");   
      } else { 
       alert ("Please enter the correct number for each ticket type."); 
      } 

       if (manyToddlers <= 10) { 
        toddlersCounter = toddlersCounter + manyToddlers; 
        costToddlers = manyToddlers * toddlers; 
        alert ("You bought " + manyToddlers + " toddler tickets for $ " + costToddlers.toFixed(2)); 
       } else if (manyJuniors <= 10) { 
        juniorsCounter = juniorsCounter + manyJuniors; 
        costJuniors = manyJuniors * juniors; 
        alert ("You bought " + manyJuniors + " junior tickets for $ " + costJuniors.toFixed(2));  
       } else if (manyAdults <= 10) { 
        adultsCounter = adultsCounter + manyAdults; 
        costAdults = manyAdults * adults; 
        alert ("You bought " + manyAdults + " adult tickets for $ " + costAdults.toFixed(2)); 
       } else { 
        alert ("You can only buy 10 tickets per ticket type."); 
       } 

     totTickets = toddlersCounter + juniorsCounter + adultsCounter; 
     totSales = costToddlers + costJuniors + costAdults;  

     } while (MAX_SEAT_COUNT <= totTickets); 
+1

提示命令总是返回一个字符串值,你应该将这些文本数字转换成许多适当的数字byToddlers = parseInt(manyToddlers,10)。数学也可能按预期工作。 – jeff 2014-09-25 06:52:16

+0

难道你没有这种情况吗?当票数小于最大值时,您应该循环,而不是更大。 – Barmar 2014-09-25 06:52:19

+0

循环到2200,每次运行最多10步,并且3个警报真的不推荐:)这将是660警报要做的事情......:S – Dwza 2014-09-25 07:55:29

回答

1

while条件是错误的。它应该是:

while (totTickets <= MAX_SEAT_COUNT) 

循环只运行一次,因为您的条件在第一次循环后失败。

+0

好吧,我改变了它,它仍然提出一个问题。 – jaramore 2014-09-25 06:58:58

+0

事实上,如果他使用“while”或“do-while”,并不重要。唯一的区别在于,“待办事项”至少经历了一次过程,同时检查条件。atm我看不到他在哪里存储数据,因此循环将始终从头开始。这就是为什么它不重要的原因:) – Dwza 2014-09-25 08:00:49

+0

@Dwza我没有说任何关于它应该是'while'还是'do-while'。我的变化是,它应该是'totTickets <= MAX_SEAT_COUNT',而不是'MAX_SEAT_COUNT <= totTickets' – Barmar 2014-09-25 13:15:06

1

我改变了一下你的代码,使它更容易阅读,并使其工作。 你的问题是在你while的结构:

  • 处理用户输入,如果不是1,2,或3
  • 得到正确的门票在最后数
  • 正确循环,当totTickets <= MAX...

这里是结构的样本,如果你想看看:

if (manyAdults <= 10) { 
    adultsCounter = adultsCounter + manyAdults; 
    costAdults = manyAdults * adults; 
    alert("You bought " + manyAdults + " adult tickets for $ " + costAdults.toFixed(2)); 
} else { 
    alert("You can only buy 10 tickets per ticket type."); 
} 

totTickets = totTickets + toddlersCounter + juniorsCounter + adultsCounter; 
//don't forget to reset their values, otherwise your ticket count will grow instantly    
toddlersCounter = 0; juniorsCounter = 0; adultsCounter = 0; 
totSales = costToddlers + costJuniors + costAdults; 

我把一个按钮,在小提琴来控制发射的时间:)的

在这个Working Fiddle与整个代码看看!