0

这是作业,所以很清楚我要做什么。

编写一个程序,根据三个因素计算酒店房间的价格。首先,一个房间里会有多少人:1-2、3-4 或 5-6?一个房间最多允许六个人。二、客人是AAA会员吗?第三,他们想要一个有风景的房间吗?费率计算如下:

基本房价为:1-2人=$50/晚 3-4人=$60/晚 5-6人=$70/晚 AAA会员每晚基本房价有优惠:1-2人= 15% 3-4 人 = 10% 5-6 人 = 5% 执行所有其他计算后,景观客房每晚的费用增加 10%。

程序应提示用户输入所有内容,执行计算并输出每晚的总成本。建议至少使用一些嵌套的 if/else 结构来计算成本。

像 firebug 和 JSLint 这样的调试器没有任何帮助,我怀疑我只是在做一些完全错误的事情,尽管我以前没有遇到过“嵌套 if”逻辑分配的问题。无论如何,我是一个完整而彻底的新手。

当我为 numberOfGuests 输入 1、为tripleAStatus 输入 N 和为 roomView 输入 N 进行测试时,finalRate 返回为 isNaN(我知道这意味着不是数字),我不知道为什么。

//Variable Declaration

var numberOfPeople;
var tripleAStatus;
var roomView;
var discountRate;
var roomRate;
var finalRate;
var discountPercent;

//Input

numberOfPeople = prompt("How many guests will their be? 6 Maximum.");


tripleAStatus = prompt("Are you a AAA Member? Y/N.");

roomView = prompt("Would you like your room to have a view?");



//Logic

if ((numberOfPeople <= 2) && (numberOfPeople > 0)) {
   roomRate = 50;
   discountPercent = .15;
} else if ((numberOfPeople <= 4) && (numberOfPeople > 2)) {
   roomRate = 60;
   discountPercent = .10;
} else if ((numberOfPeople <= 5) && (numberOfPeople > 4)) {
   roomRate = 70;
   discountPercent = .5;
} else {
   alert("Your number of guests must be at least 1 and no more than 6");
}

if (tripleAStatus = "Y") {
   discountRate = roomRate - (roomRate * discountRate);
} else if (tripleAStatus = "N") {
   discountRate = roomRate;
} else {
   alert("You need to answer with either Y or N");
}

if (roomView = "Y") {
   finalRate = (discountRate) + ((discountRate) * .10);
} else if (roomView = "N") {
   finalRate = discountRate;
} else {
   alert("You need to answer with either Y or N");
}

//Output

document.write("Total cost per night is " + "$" + finalRate);
4

6 回答 6

2

看起来像

discountRate = roomRate - (roomRate * discountRate);

应该读

discountRate = roomRate - (roomRate * discountPercent);

这就是你进入NaNfinalRate 的原因;discountRate 此时尚未定义,因此您的代码实际上是discountRate = 1 - (1 * undefined).

正如其他海报所提到的,您还需要将条件更改为使用==or ===; 是一个赋值运算符,因此您实际上=不是检查 if tripleAStatusis ,而是检查 if 的计算结果(它总是会这样)。"Y""Y"true

tripleAStatus = 'N';
if (tripleAStatus = 'Y') {
    // tripleAStatus is now "Y", and the code inside this if will always be executed
}

工作变化:http: //jsfiddle.net/5ZVkE/

于 2012-10-17T23:49:29.490 回答
0

在您的 If 语句中,您使用单个“=”分配值。由于赋值总是发生,所以它会返回 true。为了比较值,您需要在 if 语句中使用双“==”。像这样:

if (tripleAStatus == "Y") {
   discountRate = roomRate - (roomRate * discountRate);
} else if (tripleAStatus == "N") {
   discountRate = roomRate;
} else {
   alert("You need to answer with either Y or N");
}
于 2012-10-17T23:48:06.927 回答
0

将 'if' 语句中的单个 '=' 替换为 '=='。您当前正在使用赋值运算符而不是相等。

例如:

if (tripleAStatus == "Y") ...
于 2012-10-17T23:48:22.307 回答
0

您在 if 语句中使用赋值而不是相等运算符。即改变

if (tripleAStatus = "Y")

if (tripleAStatus == "Y")
于 2012-10-17T23:48:28.947 回答
0

请使用===!!这样,语句中的类型不是casted,因此更严格地检查它是否相同。

if (tripleAStatus === "Y") {
   discountRate = roomRate - roomRate * discountRate;
} else if (tripleAStatus === "N") {
   discountRate = roomRate;
}

/e -> & 它更快!

于 2012-10-17T23:57:38.017 回答
0

prompt()返回一个字符串而不是数字。

parseInt()与 一起使用numberOfPeople

另一个问题是,您在公式中复制并粘贴了错误的变量名称。看看你是如何使用discountRate而不是discountPercent.

于 2012-10-18T00:04:15.007 回答