2017-10-07 4 views
0

コードの目的は、ユーザーが何度でもゲームをプレイできるようにすることです。私は無限ループに巻き込まれ続けています。なぜ私はその理由はわかりません。 P.S.私はスイッチのステートメントに固執する必要があります。スイッチがネストされたwhileループで、ユーザーが再びプレイできるようにしました.JavaScript

var color1 = prompt('Pick a color'); 

    while (true){ 

    switch (color1) { 
     case (color1 = 'blue'): 
      document.write("nope"); 
      break; 
     case (color1 = 'yellow'): 
      document.write("nope"); 
      break; 
     case (color1 = 'white'): 
      document.write("nope"); 
      break; 
     case (color1 = 'gray'): 
      document.write("nope"); 
      break; 
     case (color1 = 'green'): 
      document.write("yes"); 
      break; 
     case (color1 = 'pink'): 
      document.write("nope"); 
      break; 
     case(color1 = 'purple'): 
      document.write("nope"); 
      break; 
     case (color1 = 'orange'): 
      document.write("nope"); 
      break; 
     case (color1 = 'green'): 
      document.write("nope"); 
      break; 
     case (color1 = 'magenta'): 
      document.write("nope"); 
      break; 
     case (color1 = 'red'): 
      document.write("nope"); 
      break; 
    } 

    if(color1 = false) 
    alert('Thanks') 

    } 
+0

ゲームのためのすべてのロジックは、彼らが再びプレーするためにあなたは予定がある場合はループ内である必要があります。また、もう一度遊ぶことをやめる方法を教えてもらえれば助かります。 – mrogers

+0

また、代入 '='の代わりに等価性をテストするには、 '=='という二重の等号を使うべきです。だから 'color1 = ...'は 'color1 == ...'でなければなりません。 – mrogers

答えて

3

あなたのコード内のいくつかの問題があります

  • =オペレータは、あなたが比較のために===または==割り当て必要がありませんが。

  • あなたは正しくswitchcaseを使用していない:あなたはちょうどそれがif条件であるかのように比較をしようとしていない、あなたはcolor1照合する値を配置する必要があります。理由さえさておきユーザーがリストにない値を入力するかもしれないという事実から、それは違うcase s内の異なる間違った色の全体の束を一覧表示するには意味がありません

    switch (color1) { 
        case 'red': 
         document.write("nope"); 
         break; 
    
  • :だからあなたのような何かを必要とします本当に論理は "それは緑ですか?"はい・いいえ。 if声明switchよりもはるかに理にかなっていますが、あなたがswitchを使用する必要が言ったので、その後、あなたは正しい答えを1 caseを持って、その後、他のすべての値をキャッチするためにdefaultを使用する必要があります。

    switch (color1) { 
        case 'green': 
         document.write("yes"); 
         break; 
        default: 
         document.write("nope"); 
         break; 
    } 
    

    をそれともあなたが合法的に複数の値を一覧表示するが、それらは、あなたがこのような「フォールスルー」を利用する必要があり、同じことを行う必要がありするために必要な仮定の場合:break OUに最終ifニーズ

    switch (color1) { 
        case 'blue': 
        case 'yellow': 
        case 'white': 
         document.write("nope"); 
         break; 
        case 'green': 
         document.write("yes"); 
         break; 
    } 
    
  • を条件が真であるときにwhileループのtを返します。現在はアラートを表示しているため、無限ループになります。ユーザーがprompt()上の[キャンセル]ボタンをクリックした場合、値がnullになりますので、そのためのテスト:

  • (演算子を固定した後)試験if (color1 === false)color1が今までfalseされませんので、意味がありません。空の文字列をテストすることもできます。 switchステートメントの後にifを使用する代わりに、そのロジックをcaseに移動することができます。 while(true)の代わりにwhile(!finished)を使用し、ユーザーがキャンセルボタンをクリックしたときにtrueに設定したfinished変数を追加します。

  • prompt()は、ループが開始され、ループが何度も同じ値をテスト繰り返し続ける前に、それ以外のユーザーは一度だけプロンプトが表示されます、内部ループである必要があります。

  • document.write()を使用するのは良い計画ではありませんが、この問題の範囲外でその問題を宣言しています。その間に少なくとも<p>個の要素または何かを出力して、各 "nope"と "yes"がそれ自身の行に現れるようにする必要があります。

    一緒にすべてのことを置く

var finished = false; 
 

 
while (!finished) { 
 
    var color1 = prompt('Pick a color'); 
 

 
    switch (color1) { 
 
    case null: 
 
    case '': 
 
     alert('Thanks'); 
 
     finished = true; 
 
     break; 
 
    case 'green': 
 
     document.write("<p>yes</p>"); 
 
     break; 
 
    default: 
 
     document.write("<p>nope</p>"); 
 
     break; 
 
    } 
 
}

関連する問題