2014-10-05 67 views
0

我很新,並且有很多東西需要學習。我在這段JavaScript中使用了Switch語句,但是我沒有按照document.write行獲得預期的輸出。任何幫助,意見和建議表示讚賞。 - 謝謝!使用Switch語句的JavaScript - 沒有得到預期的輸出

  <script type="text/javascript"> 

      var myAge = Number(prompt("Enter your age", 30)); 
      myAge = parseInt(myAge); 

      switch (myAge) 
      { 
       case (myAge >= 0 && myAge <= 10): 
        document.write("myAge is between 0 and 10"); 
        break; 

       case (!(myAge >= 0 && myAge <=10)): 
        document.write ("myAge is NOT between 0 and 10 <br />"); 
        break; 

       case (myAge >= 80 || myAge <= 10): 
        document.write ("myAge is 80 or above OR 10 or below <br />"); 
        break; 

       case (myAge >= 30 && myAge <=39 || (myAge >= 80 && myAge <= 89)): 
        document.write("myAge is between 30 and 39 or myAge is between 80 and 89"); 
        break; 

       default: 
        document.write("You did not enter a number. Please enter a number."); 
        break; 
      }  

      document.write("<BR>Execution continues here"); 


     </script> 

這就是我剛纔用'if'寫的。

 <script type="text/javascript"> 

     var myAge = Number(prompt("Enter your age", 30)); 

     if (myAge >= 0 && myAge <= 10) 
     { 
      document.write ("myAge is between 0 and 10 <br />"); 
     } 

     if (!(myAge >= 0 && myAge <=10)) 
     { 
      document.write ("myAge is NOT between 0 and 10 <br />"); 
     } 

     if (myAge >= 80 || myAge <= 10) 
     { 
      document.write ("myAge is 80 or above OR 10 or below <br />"); 
     } 

     if (myAge >= 30 && myAge <=39 || (myAge >= 80 && myAge <= 89)) 
     { 
      document.write("myAge is between 30 and 39 or myAge is between 80 and 89"); 
     } 


    </script> 

這是使用'開關',我必須參考的示例代碼片段。

<script type="text/javascript"> 

var secretNumber = prompt("Pick a number between 1 and 5:", ""); 
secretNumber = parseInt(secretNumber); 

switch (secretNumber) 
{ 
case 1: 
    document.write("Too low!"); 
    break; 

case 2: 
    document.write("Too low!"); 
    break; 

case 3: 
    document.write("You guessed the secret number!"); 
    break; 

case 4: 
    document.write("Too high!"); 
    break; 

case 5: 
    document.write("Too high!"); 
    break; 

default: 
    document.write("You did not enter a number between 1 and 5."); 
    break; 
} 
document.write("<BR>Execution continues here"); 

</script> 
+0

成爲「案件」,從哪裏得到這個? – 2014-10-05 23:07:52

+0

@GuilhermeNascimento你可以在這裏查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch#Method_two – 2014-10-05 23:30:56

+0

這是我正在做的一項任務,有些在課程中材料,其餘我們自己寫。 – Christine 2014-10-05 23:34:25

回答

3

您需要重新考慮case表達式中的邏輯。

讓我在你的代碼替換,來說明錯誤

var test = myAge >= 0 && myAge <= 10; 
if (test) { 
    ... 
} else if (!test) { 
    ... 
} else { 
    // WILL NEVER BE RUN 
} 

如果你想使用你有一個switch語句來了解你使用的數據背後的類型。

true : Boolean 
false : Boolean 
9 : Number 
1.0 : Number 

在下面的例子, v必須具有相同的類型和value1value2

switch(v) 
{ 
    case (value1): 
    ...  
    case (value2): 
    ... 
} 

問題是以下類型在您的示例中不匹配。

v = Number 
value1 = Boolean 
value2 = Boolean 
+0

嗨,謝謝!我完成了使用'if'的第一部分,我們必須使用'switch'重新編寫它。 – Christine 2014-10-05 22:29:30

+0

我的回答解決了您的邏輯問題,而下面的答案解決了即使首先正確使用switch語句也存在的問題。你問題可以更清楚地說,JS在抱怨,我的代碼沒有運行。否則,我不確定問題是句法還是邏輯錯誤。 在交換機的每種情況下,都要輸入一個匹配的值。如果你在這種情況下的價值是一個布爾值,那麼你只能匹配兩種類型的布爾值(true/false),或者你可以匹配每個可能數字的數字。 – cdosborn 2014-10-05 22:51:05

+0

嗨,感謝您提供有關發佈問題以及正在發生或未發生的提示。我給出的唯一方向是:「將多條件if語句代碼(這是我上面添加的第二個代碼塊)轉換爲交換代碼(這是我添加的第一個無法工作的代碼塊,我假設我需要根據用戶輸入和代碼中建立的範圍來匹配不同的數字 – Christine 2014-10-05 23:08:32

1

對於這樣的條件下,使用if

if (myAge >= 0 && myAge <= 10){ 
    document.write("myAge is between 0 and 10"); 

}else if (!(myAge >= 0 && myAge <=10)){ 
    //... 
} 

switch是多個正是價值觀,這不是你的情況:

switch(myAge){ 
    case 0: 
     document.write("myAge is *exactly* 0"); 
     break; 
    //... 
} 
+1

謝謝。我們被要求用'if'來寫代碼,然後用'switch'把它轉換成代碼。所以如果我明白你的意思,我的價值觀應該是確切的,而不是我嘗試的範圍。 – Christine 2014-10-05 22:36:42

+0

你應該先寫一些簡單的東西然後:p – Christian 2014-10-05 23:43:18

+0

我們被告知要寫什麼代碼,所以我沒有選擇。我明白,如果在給我的樣本中,我瞭解了我給出的樣本中的開關,但不明白如何將開關轉換爲開關,當它不是蘋果時。 – Christine 2014-10-05 23:46:57

1

你可以讓一個開關,將只評估真實的陳述,它填充找到第一個真正的陳述(案例),如果有的話,或者它會顯示默認。它將使用條件邏輯來工作。所以,你的代碼工作剛剛添加的,而不是myAge

var myAge = Number(prompt("Enter your age", 30)); 

switch (true) { 
    case (myAge >= 0 && myAge <= 10): 
     document.write("myAge is between 0 and 10"); 
     break; 

    case (!(myAge >= 0 && myAge <= 10)): 
     document.write("myAge is NOT between 0 and 10 <br />"); 
     break; 

    case (myAge >= 80 || myAge <= 10): 
     document.write("myAge is 80 or above OR 10 or below <br />"); 
     break; 

    case (myAge >= 30 && myAge <= 39 || (myAge >= 80 && myAge <= 89)): 
     document.write("myAge is between 30 and 39 or myAge is between 80 and 89"); 
     break; 

    default: 
     document.write("You did not enter a number. Please enter a number."); 
     break; 
} 

剛一說明,使用開關一樣,這是一個性能矯枉過正真。使用if/else語句會更好/更快。

您可以在這裏閱讀關於開關Switch的更多信息,並在底部可以看到使用此方法(方法二)。

+0

嗨,我之前嘗試過,但因爲它只涉及真實的陳述,我不知道我們是如何完成作業。教師要求我們使用if來取代碼並使用開關進行轉換。 – Christine 2014-10-05 23:36:39

+0

沒有其他的方式讓你的交換機使用條件標籤:)另外與if/else你檢查真/假的聲明:)這是相同的邏輯實施:) – 2014-10-05 23:37:10

+0

好工作:)沒有檢查它,但多數民衆贊成在正確的方法去 – Christian 2014-10-05 23:44:35