0

目前我正在学习循环。我正在尝试创建一个控制台应用程序,它使用 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);
   }
}
4

4 回答 4

3

我认为您遇到的主要问题是递减(i-- ) 仅发生在 if 块内。这意味着当条件失败时,您将进入无限循环。您可以将减量移到 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

于 2013-04-12T04:37:30.437 回答
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);
    } 
}
于 2013-04-12T04:39:28.313 回答
0

抱歉,我知道这真的很老了,最初的问题是 DO 而不是 FOR,但我想补充一下我为实现这一结果所做的事情。当我最初用谷歌搜索这个问题时,尽管我的查询是 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);

如果您在打印数字时需要计算并排除“0”,就像问题最初询问的那样,那么设置您的 for 循环,如下所示:

for (int i = 1; i <= args.Length; i++);

请注意,在此示例中,“i”最初是如何设置为 1 的,并且 i 小于或等于数组长度,而不是简单地小于。注意你的小于和小于/等于,否则你会得到 OutOfRangeExceptions。

于 2015-09-23T15:08:52.340 回答
-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();  
        }

    }
}
于 2013-04-12T04:37:33.617 回答