【问题标题】:How to count Up and Down using For Loop如何使用 For 循环向上和向下计数
【发布时间】:2020-07-31 04:43:25
【问题描述】:

我想使用嵌套的 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 条件的情况下做到这一点?

【问题讨论】:

  • 什么是Serial.print()?这是 C 还是 C++?
  • @jwdonahue 它的 arduino serial.print

标签: c loops for-loop arduino nested-loops


【解决方案1】:

你来了。

#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 );
    }
}

【讨论】:

  • 非常感谢
  • OP 不是要求解决方案“没有循环内的 if 条件”吗? ;)
  • @alk 没有 if 语句。他的意思是他的无数 if 语句。
  • "没有 if 语句" 来吧,三元运算符在语义上与 if-then 相同。
  • @alk 看来你无事可做。很明显,他不喜欢内部带有 for 循环的 if-else 语句。就是这样。
【解决方案2】:

我不是 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,不是显式的,也不是通过三元运算符隐式的,顺便说一句。 ;)

【讨论】:

  • 非常感谢
【解决方案3】:

我不知道你的目的是什么,但你需要使用 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); 
           }
      }
   }
}

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

【讨论】:

  • 这也不是想要的输出。请检查发布的输出。它应该看起来像这样 0-0,0-1,0-2,0-3, 1-3, 1-2, 1-1, 1-0
  • 你需要使用一个if{}else{}声明
  • 顺便说一句,我更新了我的答案,很抱歉没有正确阅读这个问题:) 干杯!
猜你喜欢
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 2016-09-14
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多