如何使用 For 循环向上和向下计数

How to count Up and Down using For Loop

我想使用嵌套的 for 循环获得这样的输出:

0 0
0 1
0 2
0 3
1 3
1 2
1 1
1 0
2 0
2 1
2 2
2 3
3 3
3 2
3 1
3 0

所以我想到了这个解决方案:

for(i=0;i<4;i++) {    
 if(i == 1){      
  for(j=3;j>=0;--j) {
    Serial.print(i);
    Serial.print(" ");
    Serial.println(j);       
  }      
}else if(i == 3){      
  for(j=3;j>=0;--j) {
    Serial.print(i);
    Serial.print(" ");
    Serial.println(j);     
  }      
}else{
  for(j=0;j<4;j++) {
    Serial.print(i);
    Serial.print(" ");
    Serial.println(j);
  }      
}
}

这行得通,但是有没有办法在循环内没有 if 条件的情况下做到这一点?

给你。

#include <stdio.h>

int main(void) 
{
    const int N = 3;

    for ( int i = 0; i <= N; i++ )
    {
        for ( int j = 0; j <= N; j++ )
        {
            printf( "%d %d\n", i , i % 2 == 0 ? j : N - j );
        }
    }

    return 0;
}

程序输出为

0 0
0 1
0 2
0 3
1 3
1 2
1 1
1 0
2 0
2 1
2 2
2 3
3 3
3 2
3 1
3 0

或者循环可以这样写

const int N = 4;

for ( int i = 0; i < N; i++ )
{
    for ( int j = 0; j < N; j++ )
    {
        printf( "%d %d\n", i , i % 2 == 0 ? j : N - j - 1 );
    }
}

我不是 Arduino 的人,但由于它与 C 相似,而且这个问题更多地是关于算法的,让我在 C 中勾勒出一个方法:

#define LEFT_START (0)
#define LEFT_END (3)
#define RIGHT_START (0)
#define RIGHT_END (3)

enum DIRECTION {
  DOWN = -1,
  UP = 1
};

int main(void)
{
  for (int direction = UP, i = LEFT_START, j = RIGHT_START - sign; 
    i <= LEFT_END; 
    ++i, direction *= -1)
  {
    for (j += direction;
      j >= RIGHT_START && j <= RIGHT_END;
      j += direction)
    {
      printf("%d %d\n", i, j);
    }
  }
}

没有 if/then,不是明确的,也不是通过三元运算符隐含的,顺便说一句。 ;)

我不知道你的目的是什么,但你需要使用 if 语句。此代码将执行您想要的操作

int n =3;

void setup() {
  // put your setup code here, to run once:
    Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
   for (int i=0; i<=n; i++){
       if(i%2 == 0){
           for (int j=0; j<=n; j++){
               Serial.print(i);
               Serial.print(" ");
               Serial.println(j); 
           }
       }
       else{
           for (int j=n; j>=0; j--){
               Serial.print(i);
               Serial.print(" ");
               Serial.println(j); 
           }
      }
   }
}

输出看起来像这样, 定义variables/constant nij完全取决于你的项目。这段代码只是一个简单的演示。