随机数在for循环中不会改变

时间:2021-07-11 07:11:36

标签: javascript code.org

我有一个 for 循环,可以在某个方向画线。在 for 循环中,我想使用随机数更改线条的颜色。但由于某种原因它不起作用。

代码如下:

for (var i = 0; i < 11; i++) {
  random1 = randomNumber(0, 255);
  random2 = randomNumber(0, 255);
  random3 = randomNumber(0, 255);
  
  stroke(rgb(random1, random2, random3));
  liftUp();
  backward(100);
  turnLeft(45);
  forward(200);
  random1 = randomNumber(0, 255);
  random2 = randomNumber(0, 255);
  random3 = randomNumber(0, 255);
  
  stroke(rgb(random1, random2, random3));
  liftDown();
  backward(150);
  turnRight(45);
  forward(150);
  turnRight(135);
  forward(150);
}

2 个答案:

答案 0 :(得分:0)

不确定,但这是我的分析

您使用相同的变量 random1, 2, 3 绘制两条不同的线。

我不知道 stroke() 应该如何画线,但是由于您正在更改 random1, 2, 3 以将它们重用于第二个 stroke() 方法,因此您将更改第一个笔画,这可能导致在同一条线上绘制两次。

+ 你似乎在 for 循环之外声明了这个变量。

可能的快速修复可能如下

编辑:您可以使用下面取自 this question

的第一个或第二个 randomNumber() 函数
/**
 * Returns a random number between min (inclusive) and max (exclusive)
 */
function randomNumber(min, max) {
    return Math.random() * (max - min) + min;
}

/**
 * Returns a random integer between min (inclusive) and max (inclusive).
 * The value is no lower than min (or the next integer greater than min
 * if min isn't an integer) and no greater than max (or the next integer
 * lower than max if max isn't an integer).
 * Using Math.round() will give you a non-uniform distribution!
 */
function randomNumber(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

for (var i = 0; i < 11; i++) {
  
  stroke(rgb(randomNumber(0, 255), randomNumber(0, 255), randomNumber(0, 255)));
  liftUp();
  backward(100);
  turnLeft(45);
  forward(200);
  
  stroke(rgb(randomNumber(0, 255), randomNumber(0, 255), randomNumber(0, 255)));
  liftDown();
  backward(150);
  turnRight(45);
  forward(150);
  turnRight(135);
  forward(150);
}

没有测试过,但这是解决问题的唯一合乎逻辑的方法。

答案 1 :(得分:0)

我喜欢@Raphael Balet 的开头,但我会编辑得更远一些。我假设您在 AppLab

中使用 liftUp() like penUp()(API) 和 liftDown() like penDown()

这里的一般参考是 Code.org 的 randomNumber() API

带有注释的旧代码

for (var i = 0; i < 11; i++) {
  stroke(rgb(randomNumber(0, 255), randomNumber(0, 255), randomNumber(0, 255)));
  //since lifting up no line drawn till pen placed back down
  liftUp();
  //So this code does nothing but reposition pen (so color #1 never seen :-(  )
  backward(100);
  turnLeft(45);
  forward(200);
  
  //New color
  stroke(rgb(randomNumber(0, 255), randomNumber(0, 255), randomNumber(0, 255)));
  //Pen down so will see output
  liftDown();
  backward(150);
  turnRight(45);
  forward(150);
  turnRight(135);
  forward(150);
}

新代码

for (var i = 0; i < 11; i++) {
  //reposition pen, needed?
  backward(100);
  turnLeft(45);
  forward(200);

  //Set Color
  var r = randomNumber(0, 255);
  var g = randomNumber(0, 255);
  var b = randomNumber(0, 255);
  stroke(rgb(r, g, b));

  //lower drawing implement
  liftDown();
  //Drive!
  backward(150);
  turnRight(45);
  forward(150);
  turnRight(135);
  forward(150);
}