1

どういうわけかコードを台無しにしているだけだと確信していますが(まだ少し初心者です)、乱数を作成しようとしています(これは正常に機能しています)。その乱数の変数を使用して、すべてのコース後のアンケートに 3 人のユーザーが参加しました (これはまったくうまくいきません)。

これを行う方法はありますか?もしそうなら、何が間違っていますか?

コードは次のとおりです (これは Adob​​e Captivate コース内にあるため、API インターフェイス ライブラリも使用していますが、その部分も正常に動作しています)。

現在、このコードの文字列は、変数に依存するのではなく、リストされたリンクに毎回ユーザーを送信します。

var jsRandomNumber = 0

function getRandomInt(min, max) {
  var jsRandomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
  alert(jsRandomNumber);
  window.cpAPIInterface.setVariableValue('randomnumber', jsRandomNumber);
}

getRandomInt (1, 3)

function randomQuizGenerator() {
    if (var jsRandomNumber = 1) {
      window.open("http://www.w3schools.com");
      window.cpAPIInterface.next();
    } else {
      window.cpAPIInterface.next();
    }
}

randomQuizGenerator()
4

3 に答える 3

2

コードに基づいて、3 つの問題が見られます。そのうちの 2 つは変数の誤解であり、3 つ目は条件の誤解です。

まず、変数を最初に 1 回だけ宣言する必要がありますvar jsRandomNumber。次に、その名前を使用するだけでアクセスできますjsRandomNumber。その前に置くたびvarに、そのスコープ内に新しい変数を作成しています。

ifステートメントについては、jsRandomNumber代わりにを使用しますが、2 つの値を比較するvar jsRandomNumberために を使用する必要もあります。==UsingjsRandomNumber = 1は 1 に設定さjsRandomNumberれ、その値を使用してifが合格するかどうかが決定されます。この場合、1 がたまたま に評価されるため、常に合格しtrueます。の値に応じてまたはjsRandomNumber == 1を返します。truefalsejsRandomNumber

var jsRandomNumber = 0

function getRandomInt(min, max) {
  jsRandomNumber = Math.floor(Math.random() * (max - min + 1)) + min;
  alert(jsRandomNumber);
  window.cpAPIInterface.setVariableValue('randomnumber', jsRandomNumber);
}

getRandomInt (1, 3)

function randomQuizGenerator() {
    if (jsRandomNumber == 1) {
      window.open("http://www.w3schools.com");
      window.cpAPIInterface.next();
    } else {
      window.cpAPIInterface.next();
    }
}

randomQuizGenerator()
于 2016-08-17T18:19:50.163 に答える
1

問題を解決するために行うことができる小さな修正がいくつかあります。

  1. jsRandomNumber複数回宣言しないでください。を使用するたびにvar、その変数を再宣言しているため、その値はスクリプト全体で変化しています。
  2. グローバル変数を更新する代わりに、そのjsRandomNumber変数を関数に対してローカルにしgetRandomIntます。それを返し、戻り値を使用できます。ここではローカル変数の方が理にかなっています。なぜなら、その数値を 1 か所で変更するだけでよいからです。変数をグローバル スコープに残すと、getRandomInt関数の外部のコードがその変数にアクセスして変更できるようになります。問題のデバッグが難しくなります。
  3. 2 つの値を比較する場合は、==またはを使用します====単一の等号は代入演算子であるため、使用は機能しません。

更新された例を次に示します。

function getRandomInt(min, max) {
  var jsRandomNumber = Math.floor(Math.random() * (max - min + 1)) + min; // only declare the variable once
  alert(jsRandomNumber);
  window.cpAPIInterface.setVariableValue('randomnumber', jsRandomNumber);
  return jsRandomNumber; // Return the variable, instead of changing a global variable
}

function randomQuizGenerator() {
    var myNumber = getRandomInt (1, 3); // using return value, not global variable
    if (myNumber === 1) { // triple equals sign for checking equality
      window.open("http://www.w3schools.com");
      window.cpAPIInterface.next();
    } else {
      window.cpAPIInterface.next();
    }
}

randomQuizGenerator()
于 2016-08-17T18:24:10.507 に答える
0

まず、再宣言する必要はありませんjsRandomNumbervar主に初めて変数を宣言するために使用されます。varしたがって、数回発生する不要な を削除できます。

次に、ステートメント内の値を比較するときは、演算子ifを使用する必要があります。==シングル=は代入演算子で、設定した値も返します。たとえば、if(a=1)は常に true と評価されます。これは、設定aが 1 に等しく、1 を返すためです。詳細については、こちらを参照してください。そのため、if ステートメントを次のように変更する必要があります。

 if(jsRandomNumber == 1) {

      ....

 }
于 2016-08-17T18:20:17.393 に答える