【问题标题】:Using two for-loops使用两个 for 循环
【发布时间】:2012-07-24 11:40:22
【问题描述】:

这是一个简单的问题,但我仍在学习这门语言。

我们如何编写有参数的程序,如果数字是5,它会写

*
**
***
****
*****

我可以这样做:

*
*
*
*

使用这个:

private void button1_Click(object sender, EventArgs e)
{
    string message = " ";

    for (int count = 0; count < numericUpDown1.Value; count++)
    {
        for (int m = 0; m < numericUpDown1.Value; count)
        {
            message += "*" + "\r\n";
        }
    }
}

我想我需要第二个for-loop,但我不确定下一步该做什么。

【问题讨论】:

  • 嗨,欢迎来到 SO!这是作业吗?如果是,请将其标记为这样。 =)
  • 哦,关于您指的是哪种语言——C# 还是 Java,似乎有些疑问?
  • 如果您正在尝试学习惯用的 C#,您可能还想研究 StringBuilder 类。

标签: c# for-loop


【解决方案1】:

如果这不是一个概念性的作业,那么这样解决会容易得多:

for(int i=1; i<=n; i++)
  Console.WriteLine(new string('*',i));

【讨论】:

  • thanks ;) 但考虑到有一个小错误......实际上索引不是从 0 开始,而是从 1 开始,它应该循环直到 i
  • OP 刚刚开始学习 CSharp。 @Gamecat 的答案似乎更合适,即使你的效率更高。
  • 你是对的。我的意思是有几种方法可以实现这样的逻辑,而我能想到的另一种方法是只使用一次迭代并使用递归来避免第二个循环。这将是另外几行代码。但这只是为了美观。我的回答只是让我们有机会了解一种在字符串上重复字符的聪明方法。这对我来说已经足够了,分享知识就是让这个地方变大的原因。这么简单的回复,今天我得到了太多的奖励:P
【解决方案2】:

你需要两个循环(见注)。

第一个 (a) 从 1 计数到 5。

第二个(b)从1到a,每次加一个“*”。

private void button1_Click(object sender, EventArgs e)
{
    string message = " ";

    for (int count = 0; count < numericUpDown1.Value; count++)
    {
        for (int m = 0; m < count; m++)
        {
            message += "*";
        }
        message += "\r\n"
    }
}

注意你可以用一个for循环来做到这一点。但我个人认为两个循环的版本更清晰。

private void button1_Click(object sender, EventArgs e)
{
    string line = "";
    string message = " ";

    for (int count = 0; count < numericUpDown1.Value; count++)
    {
       line += "*";
       message += "\r\n" + line;
    }
}

【讨论】:

  • 这是一个向 OP 展示 Environment.NewLine 变量的机会。
  • @Steve B 问题首先是未标记的,然后是 java,然后是 c# ;-)。
【解决方案3】:

试试这个:

private void button1_Click(object sender, EventArgs e)
{
    string message = "";
    for (int count = 0; count < numericUpDown1.Value; count++)
    {
            for (int m = 0; m <=count ; m++)
            {
                    message += "*" ;
            }
            message += "\r\n";
    }
}

【讨论】:

    【解决方案4】:

    你不需要两个 for 循环,试试这个

    private void button1_Click(object sender, EventArgs e)
    {
        string message = "";
    
        for (int count = 1; count < numericUpDown1.Value + 1; count++)
        {
             message += "".PadLeft(count,'*') + Environment.NewLine;      
        }
    }
    

    【讨论】:

    • "".PadLeft 与 new string('*', n) 相比有点混淆
    • 并不意味着它没有帮助 - 显然 OP 正在学习,这个问题让我们有机会清楚地展示解决这个单一问题的多种不同方法。
    【解决方案5】:

    试试这个,只是另一种学习方式:

      private static void PrintStars(int num)
            {
                for (int i = 1; i <= num; i++)
                {
                    for (int j = 1; j <= i; j++)
                    {
                        Console.Write("*");
                    }
                    Console.WriteLine();
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 2020-01-25
      相关资源
      最近更新 更多