0

ここに課題があるので、私がやろうとしていることは明らかです。

3 つの要因に基づいてホテルの部屋の料金を計算するプログラムを作成します。まず、1 つの部屋に何人いますか: 1 ~ 2、3 ~ 4、または 5 ~ 6。1 部屋に 6 人を超えることはできません。第二に、ゲストはAAAのメンバーですか?第三に、彼らは眺めの良い部屋を望んでいますか? レートは次のように計算されます。

基本宿泊料金: 1 ~ 2 人 = 1 泊あたり 50 ドル 3 ~ 4 人 = 1 泊あたり 60 ドル 5 ~ 6 人 = 1 泊あたり 70 ドル AAA メンバーには、1 泊あたりの基本宿泊料金からの割引があります: 1 ~ 2 人 = 15% 3 ~ 4 人 = 10% 5 ~ 6 人 = 5% 他のすべての計算が実行されると、ビュー付きの部屋は 1 泊あたり 10% 高くなります。

プログラムは、ユーザーにすべての入力を求め、計算を実行し、1 泊あたりの総費用を出力する必要があります。コストを計算するには、ネストされた 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);

これがNaN、finalRate になっている理由です。この時点では discountRate は定義されていないため、コードは実際には を読み取りますdiscountRate = 1 - (1 * undefined)

==他のポスターが述べたように、条件をorを使用するように変更する必要もあります===。は代入演算子であるため、 is=かどうかをチェックするのではなく、実際に が評価されるかどうかをチェックしています(常にそうなります)。tripleAStatus"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

使ってください===!! このように、ステートメントの型はそうではないcastedため、同じ型であるかどうかがより厳密にチェックされます。

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

/e -> & その高速!

于 2012-10-17T23:57:38.017 に答える
0

If ステートメントでは、単一の「=」を使用して値を代入しています。割り当ては常に発生するため、true が返されます。値を比較するには、if ステートメントで「==」を 2 つ使用する必要があります。このような:

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

prompt()NUMBER ではなく STRING を返します。

とともに使用parseInt()numberOfPeopleます。

もう 1 つの問題は、式に間違った変数名をコピーして貼り付けたことです。discountRateの代わりにどのように使用しているかを見てくださいdiscountPercent

于 2012-10-18T00:04:15.007 に答える