2010-03-23 160 views
1

我正嘗試在java中打印橫向三角形。如果用戶輸入5,輸出應該是:在java中打印橫向三角形

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

如果用戶輸入6,輸出應該是:

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

我已經得到了它,爲的情況下,當用戶進入工作5,3或1,但我的代碼似乎只適用於這三種情況。我想知道是否有人可以幫助我讓我的代碼工作更多的案件。 這就是:

public void printArrow(int n) 
{ int asterisks = 1; 
    for (int i = 0; i <= n/2; i++) 
    { 
     for (int j = i; j < asterisks; j++) 
     { 

     System.out.print("*"); 

     } 
     asterisks += 3; 
     System.out.println(); 
    } 


    asterisks = asterisks/2 - 2; 
    for (int i = 0; i < n/2; i++) 
    { 
     for (int k = i; k < asterisks; k++) 
     { 
      System.out.print("*"); 

     } 
     if (i == 1) 
     { 
      System.out.print("*"); 
     } 

     asterisks -= 2; 
     System.out.println(); 
    } 
} 
+1

我聞到作業 – zellio 2010-03-23 06:46:12

+0

其實這是一個我昨天所做的測試中的一個問題,我無法完全弄清楚。現在我很好奇。 – Will 2010-03-23 06:48:31

+0

你是通過調試器追蹤它的嗎? – 2010-03-23 07:01:47

回答

0

好吧,我將會咬

所以我們的目標是打印出來的星三角形。那麼我們將需要一個類似的循環,可能與另一個內部循環。而且我們知道它將會是對稱的,因爲它是一個三角形。

所以我一半的打印拳頭開始:

function triangle(input) 
    i <- 1 
    while i < input do 
     for j from 1 to i do 
      print "*" 
     end for 
     i <- i + 2 
     print "\n" 
    end while 

之後,我們就需要應對三角形的第二一半,因爲我們已經走了我最多的輸入值意味着我們可以將它放回原處。

if i > input then i <- i - 2 

    while i > 0 do 
     for j from 1 to i do 
      print "*" 
     end for 
     i <- i - 2 
     print "\n" 
    end while 
end function triangle 

在它的小動作,幾乎抓住了我是兩個第二,而之前的減法,如果你不這樣做,你會得到錯誤的答案。我會留下找出爲什麼取決於你。如果在僞代碼符號中存在混淆,請詢問。

+0

感謝您的回覆。我明天會詳細檢查一下。這裏遲到了,我必須明天早起。 再次感謝! – Will 2010-03-23 07:07:31

0
double middle = ((double) lines)/2; 
int asterisks = 1; 
for (int i = 1; i <= lines; i ++){ 
    for (int k = 0; k < asterisks; k ++) { 
     System.out.print("*"); 
    } 

    if (i < middle) { 
     asterisks += 2; 
    } else if (i > middle){ 
     asterisks -= 2; 
    } 
    System.out.println(); 
} 

解釋:

  • lines是輸入號碼(3,4,5,6,7等)
  • 得到中間行作爲一個雙。即因爲奇數它將x.5
  • 環路爲儘可能多的行作爲輸入是
  • 在每一行打印儘可能多的星號,因爲有在asterisks可變
  • 在每次迭代要麼增加星號的數目如果該行在中間之前,或者如果在之後,則減少該行。這意味着如果相等,則不會發生任何事情 - 即同一行具有相同數量的星號。奇數不能相等。
1

解決這個使用遞歸這是很容易:

static String triangle(int n, String s) { 
    return 
     n == 0 ? "" : 
     n == 1 ? s : 
     s 
      + 
      triangle(n - 2, "**" + s) 
      + 
     s 
    ; 
} 

public static void main(String args[]) { 
    System.out.println(triangle(6, "*\n")); 
} 

三角形的結構是不言而喻的:

  • n == 0?沒有線!
  • n == 1?一條線!
  • 否則?兩條線夾着n - 2行! (這更長!)