我目前正在为我必须做的循环这个简单的分配而烦恼。
基本上我想要达到的目标是:
1)用户给出了星形金字塔的长度
2)用for循环制作一个金字塔。
需要看起来像这样: (如果它需要5层高;第一排是5个空格1星;第2排4个空格2星等等。
*
**
***
****
(很难格式化但你得到了我的意图。)
我目前有这个
public void Pyramid()
{
Console.WriteLine("Give the hight of the pyramid");
_aantal = Convert.ToInt32(Console.ReadLine());
for (int i = 1; i <= _aantal; i++) // loop for hight
{
for (int d = _aantal; d > 0; d--) // loop for spaces
{
Console.Write(_spatie);
}
for (int e = 0; e < i; e++) // loop for stars
{
Console.Write(_ster);
}
Console.WriteLine();
}
}
输出始终是插入的空格数量,并且未正确递减。 虽然如果我调试它,它会正确倒计时。
感谢您的回复。
答案 0 :(得分:5)
您可以使用字符串类的构造函数为您创建重复,然后一次打印两个值,然后您不需要额外的for循环
static void Main(string[] args)
{
int rowHeight = 5;
for (int row = 1; row <= rowHeight; row++)
{
string spaces = new string(' ', rowHeight - row);
string stars = new string('*', row);
Console.WriteLine("{0}{1}", spaces, stars);
}
Console.ReadLine();
}
<强>更新强>
对于语义,我将使用2 for for循环显示它
static void Main(string[] args)
{
int rowHeight = 5;
for (int row = 1; row <= rowHeight; row++)
{
int totalSpaces = rowHeight - row;
for (int j = 0; j < totalSpaces; j++)
{
Console.Write(" ");
}
for (int j = 0; j < row; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.ReadLine();
}
答案 1 :(得分:1)
for (int d = _aantal; d > 0; d--) // loop for spaces
你真的想要
for (int d = _aantal - i ; d > 0; d--) // loop for spaces
但它实际上只是反映了你现在拥有的东西,但仍然没有创造出你想要的金字塔形状。
我认为你在控制台应用程序中最接近的是每隔一行减去一个空格:
for (int d = _aantal-i; d > 0; d-=2) // loop for spaces
将提供输出:
给出金字塔的高度: 10
*
**
***
****
*****
******
*******
********
*********
**********
答案 2 :(得分:0)
知道了!
static void Main(string[] args)
{
Console.WriteLine("Give the hight of the pyramid");
string _spatie = " ";
string _ster = "*";
int _aantal = Convert.ToInt32(Console.ReadLine());
for (int i = 1; i <= _aantal; i++) // loop for height
{
for (int d = i; d < _aantal; d++) // loop for spaces
{
Console.Write(_spatie);
}
for (int e = 1; e <= i; e++) // loop for stars
{
Console.Write(_ster);
}
Console.WriteLine();
}
Console.ReadKey();
}
检查出来.. !!你错过了迭代器&#39;我&#39;空间循环内的高度循环。
你会得到三角形: -
*
**
***
****
对于金字塔,您将需要奇数个星星。
答案 3 :(得分:0)
我知道您希望将此作为控制台应用程序执行,但如果您调整此代码,它应该可以正常工作
将 textbox1 / 2 替换为Consle.Readline / Write
int pyramidstories = int.Parse(TextBox2.Text);
int I = 1;
while (I <= pyramidstories)
{
for (int spacecount = 0; spacecount < (pyramidstories - I); spacecount++)
{
TextBox1.Text += " ";
}
for (int starcount = 1; starcount < I + 1; starcount++)
{
TextBox1.Text += "*";
}
TextBox1.Text += Environment.NewLine;
I++;
}
正如您的问题所述,您需要:
4个空格1星
3个空格2星级
2个空格3星级
等。
所以你的金字塔看起来应该是这样的
*
**
***
****
*****
上面的代码示例显示了如上图所示的金字塔
答案 4 :(得分:0)
获得金字塔(具有适当的间距),如下所示:
您可以使用:
static void Main(string[] args)
{
// The length of the pyramid
int lengte = 18;
// Loop through the length as given by the user
for (int i = 0; i <= lengte; i++)
{
// If its an even number (we don't want 1-2-3.. but 1-3-5.. stars)
if (i % 2 == 0)
{
// Calculate the length of the spaces we need to set
int spatieLengte = (lengte / 2) - (i / 2);
// Display spaces
for (int spaties = 0; spaties <= spatieLengte; spaties++)
{
Console.Write(" ");
}
// Display stars
for (int sterren = 0; sterren <= i; sterren++)
{
Console.Write("*");
}
// Newline
Console.WriteLine();
}
}
Console.ReadLine();
}
显然,if块和spaceLengte
变量并不是真正需要的。但我认为这会让OP更容易阅读。
祝你好运/成功;)