Можно ли написать условное с логической формой «тогда, если»? - PullRequest
0 голосов
/ 07 февраля 2020

Я сейчас пытаюсь научить себя кодировать в Processing 3. Просматривая ссылку do c, оператор then if (*expression*) {} отсутствует. Мое лучшее предположение состоит в том, что мне нужно связать вместе операторы if (*expression*) {} и else if (*expression), но я до сих пор не могу получить что-то похожее на прямой оператор then if. Как я могу go сделать что-то подобное?

На основании комментариев я вижу, что мне следовало привести пример случая. Я даже не совсем понимаю логику c, и поэтому это может быть грязно, но вот моя лучшая попытка:

Скажите, что я хочу нарисовать квадрат на консоли, где у меня есть int x = 0, int y = 0 и rect(x, y, 20, 20). Затем я хочу нарисовать несколько квадратов в последовательности и отслеживать количество квадратов. Затем, если число квадратов равно десяти, я хочу заполнить каждый квадрат случайным образом определенным цветом. Каждый десятый квадрат предназначен для использования в качестве триггера, который указывает программе изменять цвет каждого набора из десяти квадратов.

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

Мой текущий код выглядит так; пожалуйста, помните, что это ни в коем случае не является полным и что, вероятно, будут другие ошибки, потому что я только начинаю учиться кодировать, и я еще не совершен в этом:

    1. //global variables:
    2. int x = 0;
    3. int y = 0;
    4. int numberOfSquares = 0;
    5. 
    6. void setup() {
    7.
    8. // note that the size of the window is
    9. // currently needlessly large, but this
   10. // is the intended final size for the 
   11. // end result of this exercise
   12. size(1000, 1000);
   13. frameRate(5);
   14. }
   15.
   16. void draw() {
   17. //local variables: none yet
   18. 
   19. // if statement used to draw ten squares
   20.
   21. if (numberOfSquares < 10) {
   22. rect(x, y, 20, 20);
   23. x = x + 40;
   24. y = y + 40;
   25. numberOfSquares = numberOfSquares + 1;
   26. 
   27. // then, if ten squares exist, and only then
   28. // fill each square with a random color
   29.
   30. if (numberOfSquares == 10) { 
   31. fill (random(255), random(255), random(255));
   32.   }
   33.  }
   34. }
   35.
   36. // from here, draw 10 squares again,
   37. // maintaining the original fill until
   38. // another 10 squares are drawn

Там вероятно, также есть некоторые ошибки форматирования в этом редактировании; это мой первый раз, когда я использую страницу стека, поэтому я пока не совсем знаком с соглашениями. Мои извинения.

Ответы [ 3 ]

1 голос
/ 08 февраля 2020

В качестве фона для людей, еще не знакомых с Обработка : «Обработка - это гибкий программный альбом и язык для изучения кодирования в контексте визуальных искусств». Вы можете использовать разные языки программирования, и эта программа использует Java (JavaScript и Python также поддерживаются).

Функция draw вызывается непрерывно, так как вы Для частоты кадров установлено значение 5, ее следует вызывать примерно каждые 200 миллисекунд.

Функция fill устанавливает цвет, используемый для заливки фигур. Этот цвет заливки будет использоваться только для фигур, которые добавляются после , которую вы вызвали функцией заливки. В вашей программе вызов fill не меняет цвет десяти квадратов, которые программа уже создала.

Если вы используете функцию draw ниже, первые десять квадратов будут заполнены белым (по умолчанию Цвет заливки). После рисования десятого квадрата выбирается случайный цвет заливки, который будет использоваться для следующих десяти квадратов.

Используя оператор if внутри другого оператора if, вы получаете поведение «тогда, если», которое я считаю вас ищем. Цвет заливки будет изменен только в том случае, если будут выполнены оба условия: squareCount < maximumSquareCount и squareCount % 10 == 0:

//global variables:
int x = 0;
int y = 0;
int maximumSquareCount = 25;
int squareCount = 0;

void draw() {
    if (squareCount < maximumSquareCount) {
        rect(squareCount * 40, squareCount * 40, 20, 20);
        x = x + 40;
        y = y + 40;
        squareCount++;

        if (squareCount % 10 == 0) {
            fill(random(255), random(255), random(255));
        }
    }
}

Выражение, используемое для определения того, когда менять цвет заливки, может быть немного крипти c: squareCount % 10 == 0. Оператор остатка % вычисляет остаток после деления (см. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html). В этом случае число квадратов делится на десять, а если остаток равен нулю, цвет заливки изменяется. Это произойдет после 10, 20 и т. Д. c. квадраты были добавлены.

1 голос
/ 07 февраля 2020

Мне неясно, что вы имеете в виду, но вот несколько примеров, которые могут прояснить ситуацию. Май ...

if (expression) {
  // If expression is true, then do this.
else if (anotherExpression) {
  // If expression is false, check whether anotherExpression is true.
  // If it is, do this.
  // There can be more than one "else if" chained one after the other.
} else {
  // If all those "if" and "else if" expressions were false, then do this.
  // The "else" part of an "if" is not required.
}

Официальный учебник Java содержит хорошую страницу о различных типах операторов if: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html

Теперь, если вы хотите для цепочки условий:

if (expression && anotherExpression) {
  // Do this if both expressions are true.
}

if (expression) {
  // Do something if expression is true.
  if (anotherExpression) {
    // Do this if anotherExpression is also true.
    // Since this block is inside the first "if", it needs both
    // expression and anotherExpression to be true.
  }
}

Конечно, вы можете смешивать и сочетать их.

0 голосов
/ 07 февраля 2020

В ваших намерениях есть некоторая неопределенность, но я думаю, что понимаю, для чего вы собираетесь. Давайте сначала посмотрим на ваш код без изменений

void draw() 
{
    // if statement used to draw ten squares
    if (numberOfSquares < 10) 
    {
        rect(x, y, 20, 20);
        x = x + 40;
        y = y + 40;
        numberOfSquares = numberOfSquares + 1;
        // then, if ten squares exist, and only then
        // fill each square with a random color
        if (numberOfSquares == 10) { 
            fill (random(255), random(255), random(255));
        }
    }
}

Итак, давайте рассмотрим, что Draw работает, когда у вас есть numberOfSquares = 0. Сначала он проверит numberOfSquares < 10, что верно. Так что это создаст один квадрат. Затем он проверит, если numberOfSquares == 10. Это будет неверно, поскольку у нас сейчас только 1 клетка, и мы не будем бежать. Мы должны были бы позвонить draw() 10 раз, прежде чем if (numberOfSquares == 10) оценит значение true.

Теперь, ссылаясь на ваш вопрос в комментарии, вы говорите how might I implement something akin to "do thing, then do next thing for each time that next thing needs to be done"? Это концепция цикла, более конкретно, это оператор if, за которым следует loop. Немного неясно, что вы хотите этим повторить, но в качестве примера давайте предположим, что вы хотите «если у меня меньше 10 квадратов, производите квадраты, пока у меня их не будет 10». Вы можете использовать while loop или for loop для этого, я лично предпочитаю петли.

void draw() 
{
    // for loop used to draw 10 squares
    for(int i = numberOfSquares; numberOfSquares < 10; i = i + 1)
    {
        rect(x, y, 20, 20);
        x = x + 40;
        y = y + 40;
        numberOfSquares = numberOfSquares + 1;
    }
    if (numberOfSquares == 10) 
    { 
            fill (random(255), random(255), random(255));
    }
}

Теперь, когда вызывается розыгрыш, он будет производить квадраты, пока у вас не будет 10 каждый раз. В этом случае внутренний if (numberOfSquares == 10) является избыточным, потому что мы просто гарантировали, что 10 будет существовать независимо от того, когда мы достигнем этого оператора if, поэтому мы можем удалить его.

void draw() 
{
    // for loop used to draw 10 squares
    for(int i = numberOfSquares; numberOfSquares < 10; i = i + 1)
    {
        rect(x, y, 20, 20);
        x = x + 40;
        y = y + 40;
        numberOfSquares = numberOfSquares + 1;
    }
    // fill 
    fill (random(255), random(255), random(255));
}
...