0
N_ALPHA = 6;
N_CHOICES = 4;
ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var alphabet = ALPHABET.substring(0, N_ALPHA);
var indexForm=new Array();
function guessStrToArr(inStr)
{ 
  {
    for (i=0;i<N_CHOICES;i++)
    {
       indexForm[i]=alphabet.indexOf(inStr.charAt(i).toUpperCase());
    }
  }
 return indexForm;
}

function numBulls(guess, goal)
{
  guess=new Array (guessStrToArr(prompt('enter your guess1')));
  alert(guess);
  goal=new Array(guessStrToArr(prompt('enter your guess2')));
  var checkArray = new Array (guess.concat(goal); 
  alert(checkArray);

  var count=0;

  for (i=0;i<N_CHOICES;i++)
  {
    if (guess[i]===goal[i])
    {
      count++
    }
  }
  return count;
}

numBulls();

上記のコードを実行すると、同じ配列が返されます。プロンプトaletボックスに別のコードを入力します。理由はわかりませんが、手伝ってくれませんか?どうもありがとうございます。

4

1 に答える 1

1

indexFormグローバル変数です。guessStrToArr初めて関数を呼び出すと、配列にデータが入力されます。2回目は再作成されます。比較を行うときは、配列をそれ自体と比較します。これを試して:

function guessStrToArr(inStr) { 
    var indexForm = new Array();

    for (i = 0; i < N_CHOICES; i++) {
       indexForm[i] = alphabet.indexOf(inStr.charAt(i).toUpperCase());
    }

    return indexForm;
}

inStr.lengthまた、それがと同じであることを確認しようとはしていないことに注意してくださいN_CHOICES

于 2013-01-26T13:36:07.500 に答える