【问题标题】:'If' statement inside the 'for' loop'for' 循环内的'If' 语句
【发布时间】:2011-09-20 15:05:54
【问题描述】:

在下面的 Objective-C 代码中,当第一个内部 'if' 语句满足(真)时,这是否意味着循环终止并转到下一个语句?

另外,当它执行一次后返回到内部的'for'语句时,p的值是否又是2,为什么?

// Program to generate a table of prime numbers

#import <Foundation/Foundation.h>

int main (int argc, char *argv[])
{
   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

   int p, d, isPrime;

   for ( p = 2; p <= 50; ++p ) {
       isPrime = 1;

       for ( d = 2; d < p; ++d )
            if (p % d == 0)
                isPrime = 0;

       if ( isPrime != 0 )
           NSLog (@”%i ", p);
 }

 [pool drain];
 return 0;
}

提前致谢。

【问题讨论】:

  • forif 语句中始终使用花括号是最佳实践,它可以使您的代码更加清晰并消除歧义。
  • 我保留了一本教科书的原始代码。

标签: objective-c if-statement for-loop


【解决方案1】:

在发生以下情况之一之前,循环不会终止:

  1. 遇到 return
  2. 引发了一个异常
  3. 遇到 break 语句
  4. 循环条件为假

ps。使用花括号,否则您的代码将无法阅读/调试/维护

【讨论】:

    【解决方案2】:

    不,解析为 true 的 'if' 语句不会让你跳出循环。循环继续执行,这可能是您认为 p 仍然是 2 的原因。它仍然是 2,因为您仍在内部循环中。

    【讨论】:

      【解决方案3】:

      您的代码与此等价:

      // Program to generate a table of prime numbers 
      
      import <Foundation/Foundation.h> 
      
      int main (int argc, char *argv[]) 
      { 
          NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
      
          int p, d, isPrime; 
      
          for ( p = 2; p <= 50; ++p ) { 
              isPrime = 1; 
      
              for ( d = 2; d < p; ++d ) { 
                  if (p % d == 0) { 
                      isPrime = 0;
                  }
              }
      
              if ( isPrime != 0 ) { 
                  NSLog (@”%i ", p); 
              }
          } 
      
          [pool drain]; 
          return 0; 
      } 
      

      iffor 控制语句的内容是大括号中的下一条语句或语句块。

      正如 daveoncode 所说,你真的应该使用大括号。

      【讨论】:

      • 谢谢。正如我上面评论的那样,我只是保留了我正在研究的一本书中的原始代码,这就是我感到困惑的原因。现在,我认为这是有道理的。但是,我不明白为什么当你再次返回这个内部 for 语句时,d 的值又是 2?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 2019-05-04
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多