对于Loop奇数和偶数

时间:2016-02-04 05:24:00

标签: c# algorithm for-loop

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

考虑以下因素:

  1. 输入计数编号n
  2. print n
  3. if(n == 1)然后停止
  4. 如果n是奇数,则n = 3 * n + 1
  5. 其他n = n / 2
  6. 返回第2步
  7. 我有一个静态功能:

    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
    

    这是我迷失的地方。其他每个人都应该返回bool值吗?我可能没有正确的算法。

    我将基本上使用此算法循环遍历从1到200的每个数字。所以我应该有n出局如:

    fileOut.WriteLine(" N  RCL    N  RCL    N  RCL    N  RCL    N  RCL    N  RCL    N  RCL");
    fileOut.WriteLine("--- ---   --- ---   --- ---   --- ---   --- ---   --- ---   --- ---");
    

    如果在N以下,我会在RCL下有1,2,3,4,在我的数字旁边,我会有1,2,8,3等。

    谢谢,

5 个答案:

答案 0 :(得分:1)

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在循环之外

答案 1 :(得分:0)

你想做的事情不清楚,但要回答你的问题:

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
}

答案 2 :(得分:0)

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

正如最初编写的那样,在if循环执行完毕之前,您正在返回for块,因此发出警告。

答案 3 :(得分:0)

我认为你打算这样做

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

答案 4 :(得分:0)

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

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

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