目前我正在学习循环。我正在尝试创建一个控制台应用程序,它使用do while循环来打印20到0之间的所有奇数整数。
为什么当我在代码下方取消注释if
语句时,不打印任何内容并且永远不会完成?
using System;
class Program
{
static void Main(string[] args)
{
int i = 20;
do
{
// if (i%2 !=0)
{
Console.WriteLine(
"When counting down from 20 the odd values are: {0}", i--);
}
} while (i >=0);
}
}
答案 0 :(得分:3)
我认为你遇到的主要问题是减量(i--
)只发生在if块内。这意味着当条件失败时,您将进入一个infite循环。您可以在if块之外移动减量来修复它。试试这个:
Console.Write("When counting down from 20 the odd values are: ");
do
{
if (i % 2 != 0)
{
Console.Write(" {0}", i);
}
i--;
} while (i >= 0);
我还将第一个Console.Write
移到了循环之外,以减少输出中的冗余。这将产生:
当从20倒数时,奇数值是:19 17 15 13 11 9 7 5 3 1
答案 1 :(得分:1)
for循环可能更容易理解:
Console.WriteLine("When counting down from 20 the odd values are: ");
for( int i = 20; i >= 0; i--)
{
if (i%2 !=0)
{
Console.Write(" " + i);
}
}
答案 2 :(得分:0)
对不起,我知道这真的很老了,最初的问题是DO不是FOR,但我想补充一下我做了什么来完成这个结果。当我用Google搜索问题时,尽管我的查询是FOR循环,但这是首先返回的。希望有人能在路上发现这有用。
下面将打印数组的奇数索引 - 在本例中为Console App args。
using System;
namespace OddCounterTest
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < args.Length; i++)
{
Console.WriteLine(i);
i++;
}
}
}
}
带有6个参数的输出将是: 1 3 5
将i ++移动到for循环的第一步将获得偶数。
using System;
namespace EvenCounterTest
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < args.Length; i++)
{
i++;
Console.WriteLine(i);
}
}
}
}
输出将是: 2 3 4
这是设置,因此您也可以获得args的实际值,而不仅仅是args索引的计数和打印。只需创建一个字符串并将字符串设置为args [i]:
string s = args[i];
Console.WriteLine(s);
如果您需要计算和排除&#34; 0&#34;如果您正在打印最初询问的问题,请设置您的for循环,如下所示:
for (int i = 1; i <= args.Length; i++);
注意&#34;我&#34;在这个例子中,最初设置为1,i小于或等于数组长度,而不是简单地小于。注意你的小于或小于/等于或者你会得到OutOfRangeExceptions。
答案 3 :(得分:-1)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Do_while_Test
{
class Program
{
static void Main(string[] args)
{
int i = 20;
Console.WriteLine();
Console.WriteLine("A do while loop printing odd values from 20 - 0 ");
do
{
if (i-- %2 !=0)
{
Console.WriteLine("When counting down from 20 the odd values are: {0}", i--);
}
} while (i >=0);
Console.ReadLine();
}
}
}