2016-08-08 2 views
0

最初の要素のインデックス、つまり紫色が-1と表示されている間に、正しい結果を得るために予期せぬことが起こります.Hen私は期待どおりの結果を得ることができません。それは私がさらに問題に直面しているので、私はjavascriptに実際にコーディングすることができます。私はあなたができるだけ早く答えてくれることを願っています。予期しない値を示すindexOf()

var colors = ["voilet", "indigo", "blue", "green", "yellow", "orange", "red"]; 
 
var target; 
 
var target_index; 
 
var guess_input; 
 
var finished = false; 
 

 
function do_game() { 
 
    var random_number = Math.random() * 7; 
 
    var random_number_integer = Math.floor(random_number); 
 
    var target_index = random_number_integer; 
 
    target = colors[target_index]; 
 
    alert(target); 
 
    while (!finished) { 
 

 
    var guess_input = prompt("I am thinking of a color " + 
 
     "violet,indigo,blue,green,yellow,orange,red" + 
 
     "What is the color?"); 
 
    alert(colors.indexOf(guess_input)); 
 
    finished = check_guess(); 
 
    } 
 
} 
 

 
function check_guess() { 
 

 
    if (colors.indexof(guess_input) < 0) { 
 
    alert('not present'); 
 
    return false; 
 
    } 
 
    if (guess_input > target) { 
 
    alert('you gave large'); 
 
    return false; 
 
    } 
 
    if (guess_input < target) { 
 
    alert('you gave small'); 
 
    return false; 
 
    } 
 
    return true; 
 
}

+2

'indexOf'は、要素が配列内に見つからなかった場合に' -1'を返します。 'colors'配列(バイオレットの代わりにvoilet)にタイプミスがあります。 – AbM

+0

FYI:ここでの問題は実際の問題ではないので、簡単な誤植で閉じるべきではありません。入力ミスを修正するための投票された回答のトップは、コードを修正するものではありません。 – epascarello

+0

typoがコードを修正しました。これはエラー – Weedoze

答えて

5

あなたguess_inputvioletであり、それはvioletがあなたの配列があり

["voilet","indigo","blue","green","yellow","orange","red"]; 

に存在しないので、これは正常な動作です-1

を返すと言いましたタイプミスROR:あなたはvoiletを書いたの代わりに、それはグローバルではありませんので、violet

0

guess_inputdo_game機能のvar内部で定義されています。

varを削除して、他の方法でアクセスできるようにするか、他の方法に渡すことができます。

/* fixed spelling here */ 
 
var colors = ["violet", "indigo", "blue", "green", "yellow", "orange", "red"]; 
 
var target; 
 
var target_index; 
 
var guess_input; 
 
var finished = false; 
 

 
function do_game() { 
 
    var random_number = Math.random() * 7; 
 
    var random_number_integer = Math.floor(random_number); 
 
    var target_index = random_number_integer; 
 
    target = colors[target_index]; 
 
    alert(target); 
 
    while (!finished) { 
 
    /* removed var here */ 
 
    guess_input = prompt("I am thinking of a color " + 
 
     "violet,indigo,blue,green,yellow,orange,red" + 
 
     "What is the color?"); 
 
    alert(colors.indexOf(guess_input)); 
 
    finished = check_guess(); 
 
    } 
 
} 
 

 
function check_guess() { 
 

 
    /* fixed typo here */ 
 
    if (colors.indexOf(guess_input) < 0) { 
 
    alert('not present'); 
 
    return false; 
 
    } 
 
    if (guess_input > target) { 
 
    alert('you gave large'); 
 
    return false; 
 
    } 
 
    if (guess_input < target) { 
 
    alert('you gave small'); 
 
    return false; 
 
    } 
 
    return true; 
 
} 
 

 
do_game()

+0

'guess_input'が間違っています。関数の外側に' var'があります。 –

+0

@NiettheDarkAbsol誤ったdownvoteのために、誤って 'var guess_input = prompt'ありがとうございます。 – epascarello

+0

ハッシュ、変数を再宣言しました。けっこうだ。 –

0

あなたの配列の紫のスペルを確認してください。

if (colors.indexof(guess_input) < 0) { 
    alert('not present'); 
    return false; 
    } 

あなたがここにもタイプミスを持っています。

colors.indexOf(guess_input) 
関連する問題