В то время как оператор вылетает вкладка в Repl.it (P5.js) - PullRequest
0 голосов
/ 23 марта 2019

У меня есть проект 27-го числа, и я столкнулся с проблемой. Repl.it падает, когда я загружаю свою программу. Если вы посмотрите на мой код, в строке 42:

//getting a number that isnt the players door or the prize door
  while ((randomDoor2 == prizeDoor) || (randomDoor2 == randomDoor)) {
    setTimeout(
      function(){ 
        randomDoor2 = Math.round(random(1,3));
      }, 
      10000);
  }

есть цикл while. Комментируя это, код работает без задержек.

Понятия не имею, что мне следует попробовать и сделать.

Это может быть что-то иное, чем мое время, так что вот весь мой script.js:

var chance; // swap | dont swap
var prizeDoor;
var randomDoor;
var randomDoor2;
var randomDoor3;
var decide;

function setup() {
  chance = 50;
  createCanvas(1000,1000);
}

function draw() {
 //setting up round

  prizeDoor = Math.round(random(1,3));

  //choosing first door

  console.log("[1] [2] [3]");
  randomDoor = Math.round(random(1,3));

  //showing user the door AI picks
var chance = 50; // swap | dont swap
var prizeDoor;
var randomDoor;
var randomDoor2;
var randomDoor3;
var decide;

function setup() {
  chance = 50;
  createCanvas(1000,1000);
}

function draw() {
 //setting up round

  prizeDoor = Math.round(random(1,3));

  //choosing first door

  console.log("[1] [2] [3]");
  randomDoor = Math.round(random(1,3));

  //showing user the door AI picks

  if (randomDoor == 1) {
    console.log(" ^");
    console.log(" |");
  } else if (randomDoor == 2) {
    console.log("     ^");
    console.log("     |");
  } else {
    console.log("         ^");
    console.log("         |");
  }

  console.log("AI chooses door #" + randomDoor + ".");

  //revealing a door

  //getting a number that isnt the players door or the prize door
  while ((randomDoor2 == prizeDoor) || (randomDoor2 == randomDoor)) {
    setTimeout(
      function(){ 
        randomDoor2 = Math.round(random(1,3));
      }, 
      10000);
  }

  //showing this to the user
  console.log("");
  console.log("Door #" + randomDoor2 + " does not have the prize.");

  //having the computer make a desicion
  if (random(0,100) < chance) {
    decide = "swap doors.";
    while ((randomDoor3 !== randomDoor2) || (randomDoor3 !==  randomDoor)) {
      randomDoor3 = Math.round(random(1,3));
    }
  } else {
    decide = "keep the current door.";
  }

  //letting the user know of the computer's desicion
  console.log("");
  console.log("The AI chose to " + decide);

  // figuring out if the AI won
  if (randomDoor3 == prizeDoor || randomDoor == prizeDoor) {

    console.log("AI won!");

    if (decide == "swap doors.") {
      chance -= 5;
    } else {
      chance += 5;
    }
  } else {

    console.log("AI lost.");

    if (decide == "swap doors.") {
      chance += 5;
    } else {
      chance -= 5;
    }
  }
}

Я хотел, чтобы в заявлении while была найдена дверь, которая не является выбранной дверью или дверью с призом, а вместо этого ломается.

Ответы [ 4 ]

0 голосов
/ 24 марта 2019

Я понял это.На самом деле это было довольно легко, просто поменяйте несколько операторов.Вот последний кусок кода:

var chance = 50; // swap | dont swap
var prizeDoor;
var randomDoor;
var randomDoor2;
var randomDoor3;
var decide;

function setup() {
  chance = 50;
  createCanvas(1000,1000);
}

function draw() {
 //setting up round

  prizeDoor = Math.round(random(1,3));

  //choosing first door

  console.log("[1] [2] [3]");
  randomDoor = Math.round(random(1,3));

  //showing user the door AI picks

  if (randomDoor == 1) {
    console.log(" ^");
    console.log(" |");
  } else if (randomDoor == 2) {
    console.log("     ^");
    console.log("     |");
  } else {
    console.log("         ^");
    console.log("         |");
  }

  console.log("AI chooses door #" + randomDoor + ".");

  //revealing a door

  //getting a number that isnt the players door or the prize door
  while ((randomDoor2 == prizeDoor) || (randomDoor2 == randomDoor)) {
    setTimeout(
      function(){ 
        randomDoor2 = Math.round(random(1,3));
      }, 
      10000);
  }

  //showing this to the user
  console.log("");
  console.log("Door #" + randomDoor2 + " does not have the prize.");

  //having the computer make a desicion
  if (random(0,100) < chance) {
    decide = "swap doors.";
    while ((randomDoor3 == randomDoor2) || (randomDoor3 ==  randomDoor)) {
      randomDoor3 = Math.round(random(1,3));
    }
  } else {
    decide = "keep the current door.";
  }

  //letting the user know of the computer's desicion
  console.log("");
  console.log("The AI chose to " + decide);

  // figuring out if the AI won
  if (randomDoor3 == prizeDoor || randomDoor == prizeDoor) {

    console.log("AI won!");

    if (decide == "swap doors.") {
      chance -= 5;
    } else {
      chance += 5;
    }
  } else {

    console.log("AI lost.");

    if (decide == "swap doors.") {
      chance += 5;
    } else {
      chance -= 5;
    }
  }
}
0 голосов
/ 23 марта 2019

вы создаете два случайных числа последовательно призовые и случайные, поэтому одинаковые числа, генерируемые с помощью Math.random при двух последовательных попаданиях, довольно трудно получить.

В вашем цикле while вы ожидаете, что ваше новое случайное число будет совпадать с вашими двумя предыдущими случайными числами, теперь для одного попадания / компиляции они могут быть одинаковыми или не могут быть, если они не одинаковы, то бесполезно, если ваш цикл while не будет никогда прекратить,

говорят а = 1 и б = 2

сейчас ожидая, что c == a && c == b никогда не случится, потому что a! = b;

изменение c в цикле while не будет иметь значения. так что ваша логика совершенно неверна, дайте нам знать, чего вы пытаетесь достичь, может быть, тогда мы сможем помочь построить логику

let random = () => Math.random() * 3;
let prizeDoor = Math.round(random());
console.log('prizeDoor', prizeDoor)
let randomDoor = Math.round(random());
console.log('randomDoor', randomDoor)
0 голосов
/ 23 марта 2019

random () - это метод объекта Math.Это сработало для меня, заменив все вызовы метода random () на Math.random ().

0 голосов
/ 23 марта 2019

Изменить Я получил код для работы, изменил несколько бит, чтобы он работал на моем конце, как math.random, но не должно быть трудно изменить обратно, а также новый для stackoverflow, поэтому мне потребовалось некоторое время, чтобы выяснить, вставка фрагмента кода: стр.

<script type="text/javascript">

var chance; // swap | dont swap
var prizeDoor;
var randomDoor;
var randomDoor2;
var randomDoor3;
var decide;
var chance = 50;
function setup() {
  createCanvas(1000,1000);
}

function draw() {
 //setting up round

  prizeDoor = Math.floor((Math.random() * 3) + 1);
  console.log(prizeDoor+" prizeDoor");

  //choosing first door
  console.log("[1] [2] [3]");
  randomDoor = Math.floor((Math.random() * 3) + 1);
  randomDoor2 = Math.floor((Math.random() * 3) + 1);
  randomDoor3 = Math.floor((Math.random() * 3) + 1);


  //showing user the door AI picks

  if (randomDoor == 1) {
    console.log(" ^");
    console.log(" |");
  } else if (randomDoor == 2) {
    console.log("     ^");
    console.log("     |");
  } else {
    console.log("         ^");
    console.log("         |");
  }



  console.log("AI chooses door #" + randomDoor + ".");


  //revealing a door

  //getting a number that isnt the players door or the prize door
  while ((randomDoor2 == prizeDoor) || (randomDoor2 == randomDoor)) {
   randomDoor2 = Math.floor((Math.random() * 3) + 1);
  }

  //showing this to the user
  console.log("");
  console.log("Door #" + randomDoor2 + " does not have the prize.");

  //having the computer make a desicion
  if (Math.floor((Math.random() * 100) + 1) < chance) {
    decide = "swap doors.";
    while ((randomDoor3 == randomDoor2) || (randomDoor3 == randomDoor)) {
      randomDoor3 = Math.floor((Math.random() * 3) + 1);
    }
  } else {
    randomDoor3 = randomDoor;
    decide = "keep the current door.";
  }

  //letting the user know of the computer's desicion
  console.log("");
  console.log("The AI chose to " + decide);

  // figuring out if the AI won
  if (randomDoor3 == prizeDoor) {

    console.log("AI won!");

    if (decide == "swap doors.") {
      chance -= 5;
    } else {
      chance += 5;
    }
  } else {

    console.log("AI lost.");

    if (decide == "swap doors.") {
      chance += 5;
    } else {
      chance -= 5;
    }
  }
}

draw();
</script>
...