2017-03-04 57 views
1

經過一個小時的頭痛,我終於想出瞭如何在控制檯上繪製帽子。但是,現在我很難連接帽子的左側和右側部分。我假設我做了所有必要的計算,所以他們不必檢查。我試圖用嵌套循環來連接它們,但是我搞砸了。這是我做了這麼遠(輸入一個號碼來啓動程序):用C畫一頂帽子#

int n = int.Parse(Console.ReadLine()); 

     //top of hat 
     Console.Write(new string('.', 2 * n - 1)); 
     Console.Write("/|\\"); 
     Console.Write(new string('.', 2 * n - 1)); 
     Console.WriteLine(); 
     Console.Write(new string('.', 2 * n - 1)); 
     Console.Write("\\|/"); 
     Console.Write(new string('.', 2 * n - 1)); 
     Console.WriteLine(); 

     //middle left 
     for (int i = 2 * n - 1; i >= 0; i--) 
     { 
      Console.Write(new string('.', i)); 
      Console.Write("*"); 
      Console.Write(new string('-', n * 2 - i - 1)); 
      Console.Write("*"); 
      Console.WriteLine(); 
     } 

     //middle right 
     for (int m = 0; m < 2 * n - 1; m++) 
     { 
      Console.Write(new string('-', m)); 
      Console.Write("*"); 
      Console.Write(new string('.', n * 2 - m - 2)); 
      Console.WriteLine(); 
     } 

     //bottom 
     Console.Write(new string('*', 4 * n + 1)); 
     Console.WriteLine(); 
     for (int p = 0; p < 2 * n; p++) 
     { 
      Console.Write("*"); 
      Console.Write("."); 
     } 
     Console.Write("*"); 
     Console.WriteLine(); 
     Console.Write(new string('*', 4 * n + 1)); 
     Console.WriteLine(); 

How it should look like

How it looks like

+3

你能展示一個正確的帽子應該是什麼樣子的例子,以及程序的當前輸出是什麼? – JJJ

+1

你真的應該學習編碼的基礎知識。在這裏:瞭解如何將問題分解爲小的可重用功能。這裏:學習如何繪製線條;然後填充矩形,橢圓形填充一個。有了這些基元,任務就會變得微不足道,就像那些古怪的人一樣。 – TaW

回答

1

中間左側和右側中間部分應該是之前的同一迴路內Console.WriteLine(),因爲它們必須繪製在同一條線上。

如果你在兩個連續的循環中繪製它們,每個包含的WriteLine將被繪製在彼此之上。

將中間左側循環中的3個第一個寫入,反轉它們的順序並將它們添加到WriteLine之前。放下中間的右環。完成!

此外,如果您將所有'.'(除了底部)替換爲' ',您將會看到更好的外觀。此外,添加Console.Write("n = ");作爲第一條語句以獲得輸入提示。

n = 3 
    /|\ 
    \|/ 
    *** 
    *-*-* 
    *--*--* 
    *---*---* 
*----*----* 
*-----*-----* 
************* 
*.*.*.*.*.*.* 
************* 

如果你寫這樣

Console.Write(new string('.', i)); 

對線的功能代碼會變得更加readble:

private static void Draw(char c, int count = 1) 
{ 
    Console.Write(new string(c, count)); 
} 

然後

Console.Write(new string(' ', 2 * n - 1)); 

變得簡單

Draw(' ', 2 * n - 1); 

還要注意count參數是可選的,其默認值爲1。所以如果你需要繪製一個字符,你可以寫出

Draw('*');