对于循环奇数和偶数

本文关键字:循环 于循环 | 更新日期: 2023-09-27 18:33:05

我正在使用以下逻辑/算法创建报告:

考虑以下几点:

  1. 输入计数数字 n
  2. 打印 n
  3. 如果 (n==1) 则停止
  4. 否则,如果 n 是奇数,则 n = 3*n+1
  5. 否则 n = n/2
  6. 返回步骤 2

我有一个静态函数:

static int nCalc()
{
  int n;
  for(n=1; n<=200; n++)
  {
    if (n == 1)
    {
      fileOut.WriteLine("{0}", n);
    }
    else if (n % 2 == 0)
    {
      n = 3 * n + 1;
    }
    else
    {
      n = n / 2;
    }
    return n;
  }
}

我得到:

CS0161 - not all code paths return a value

这就是我迷路的地方。其他人和否则是否应该有一个返回布尔值?我可能没有正确的算法。

我基本上要做的是使用这种算法循环遍历从 1 到 200 的每个数字。所以我应该有 n 个放,例如:

fileOut.WriteLine(" N  RCL    N  RCL    N  RCL    N  RCL    N  RCL    N  RCL    N  RCL");
fileOut.WriteLine("--- ---   --- ---   --- ---   --- ---   --- ---   --- ---   --- ---");
在 N 下我将有 1、2、3、

4,然后在 RCL 下,在我的数字旁边我将有 1、2、8、3 等。

谢谢

对于循环奇数和偶数

static int nCalc()
{
  int n;
  for(n=1; n<=200; n++)
  {
    if (n == 1)
    {
      fileOut.WriteLine("{0}", n);
    }
    else if (n % 2 == 0)
    {
      n = 3 * n + 1;
    }
    else
    {
      n = n / 2;
    }

  }
 return n;
}

return在循环之外

你想做什么还不清楚,但要回答你的问题:

static int nCalc()
{
  for(...)
  {
    ...
    return n;
  }
  // If the code gets here there is no return.
  // The compiler doesn't know the code can't get here hence the error
}

return 语句移出for循环:

static int nCalc()
{
    int n;
    for(n = 1; n <= 200; n++)
    {
        if (n == 1)
        {
            fileOut.WriteLine("{0}", n);
        }
        else if (n % 2 == 0)
        {
            n = 3 * n + 1;
        }
        else
        {
            n = n / 2;
        }
    }
    return n;
}

正如最初所写,您在for循环完成执行之前返回if块,因此发出警告。

我想你的意思是这样做

static void Main() 
{
   for(int n=1;n<=200;n++)
   {
       fileOut.WriteLine("{0}",Calc(n));
   }
}
static int Calc(int n)
{
    int result;
    if (n == 1)
    {
        result = 0;
    }
    else if (n % 2 == 0)
    {
      result = 3 * n + 1;
    }
    else
    {
      result = n / 2;
    }
    return result;
}

方法应始终具有在任何条件下都会执行的 return 语句。在您的情况下,return 语句位于 for 循环中,如果不满足循环条件,最终将无法执行。

将 return 语句移出循环将解决您的问题。

static int nCalc()
{  
   int n;  
   for(...)  
   {    
      ...  
   }  
   return n;
}