对于循环奇数和偶数
本文关键字:循环 于循环 | 更新日期: 2023-09-27 18:33:05
我正在使用以下逻辑/算法创建报告:
考虑以下几点:
- 输入计数数字 n
- 打印 n
- 如果 (n==1) 则停止
- 否则,如果 n 是奇数,则 n = 3*n+1
- 否则 n = n/2
- 返回步骤 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;
}