2013-10-21 52 views
0

是的,這是家庭作業,但我無法弄清楚如何僅使用for循環。如何僅使用for循環創建此結構

enter image description here

我能夠用重現結構循環,如果else語句,但我的教練告訴我,不會飛。

public class Problem3 { 
public static void main(String[] args) { 
    /** Code under here */ 
     int box = 22; 
     for(int i=22; i>0; i--) 
     { 
     if(i==18) 
      System.out.println("\\\\"+"!!!!!!!!!!!!!!!!!!"+"//"); 
     else if(i == 14) 
      System.out.println("\\\\\\\\"+"!!!!!!!!!!!!!!"+"////"); 
     else if (i== 10) 
      System.out.println("\\\\\\\\\\\\"+"!!!!!!!!!!"+"//////"); 
     else if (i == 6) 
      System.out.println("\\\\\\\\\\\\\\\\"+"!!!!!!"+"////////"); 
     else if (i == 2) 
      System.out.println("\\\\\\\\\\\\\\\\\\\\"+"!!"+"//////////"); 
     else if(i == 22) 
      System.out.println("!!!!!!!!!!!!!!!!!!!!!!"); 
     } 


    System.out.println(""); 
}  
} 
+0

使用嵌套循環來構建的字符串。 – SLaks

+0

@SLaks ...我知道我需要這樣做。我的問題是如何。 –

+0

哦,我要把這個送給我的學生。 –

回答

4

一些提示:

  • 的線是總是對稱的
  • (從0開始)
  • \在一行的開頭的數字可從行號來計算
  • 的一條線上的字符數是恆定的,因此如果知道有多少個\,則還可以計算!的數量。

基於這些意見,你應該能夠產生一個只有2級嵌套循環的代碼(我沒有說2循環,只有2級)。

+0

我只想說謝謝。因爲我太新了,所以我無法對你的帖子進行提拔。 –

+0

不客氣。儘管你可以接受答案,讓每個人都知道你找到了解決問題的辦法。 – Kaidjin

+0

我仍然在試圖弄清楚:P別擔心,我會給你你的獎勵。從穆罕默德的'給定'下面的代碼,我想到了單獨構建每個部分的想法。這會起作用嗎?或者盒子不能正確形成。 –

0

請注意,在每一行中(如果您從0開始編號),開始時會有2 * i \個字符,最後是2 * i'/'個字符,並且其餘行充滿了! 「字符。

所以,你的代碼看起來是這樣的:

for (int row = 0; row < 6; row++) { 
    int slashes = 2 * row; 
    for (int slash = 0; slash < slashes; slash++) { 
    // Print a `\` 
    } 
    // Work out how many '!'s you need and print them. 
    // ... you try this bit 
    for (int slash = 0; slash < slashes; slash++) { 
    // Print a `/` 
    } 
} 
+0

我明白了,但是如何嵌套循環以打印三角形的不同部分? 事實上,當我將它與你的解釋相結合時,@ Muhammad-S的答案被無情地低估了。我應該分別構建每個零件嗎 –

0

注意,每一次,有兩個斜槓/每邊反斜槓(4個的少! S IN中間)。您可以製作一個for循環,該循環增加了斜槓的數量,並計算要打印的!的數量以填充長度至22,然後打印出當前行的所有必需字符。

1

有一排22個字符,和行n具有2*(n-1)\字符,2*(n-1)/字符和22 - 4*(n-1)!字符。

您應該首先構建要打印的字符串(對於每行)。這將涉及重複字符(this question提供了一些想法)

-1

number_of_lines是期望的輸出(在這種情況下是6)內的行數。 number_of_characters是每行應該有的字符數(在這種情況下是22)。

我們知道有一種模式。左側有\,中間有!,右側有/。這意味着我們需要一個外部循環循環通過線路和三個內部循環爲每個這些部分。

我們如何知道每個角色需要多少個?

第一線具有0 \,22 !,和0 /

第二行具有2 \,18 !,和2 /

第三行具有4 \,14 !和4 /

第四行有6 \,10 !和6 /

第五行有6 \,10 !和6 /

第六行有8個\,6 !和8 /

第七行有10個\,2 !和10 /

有一種模式。每一行具有由2的\/計數增量,並通過4號的

\等於當前行號兩倍!計數遞減(假設第一行號爲0)。 /也一樣。 !的數量是每行預期的字符總數減去當前行號的四倍(假設第一行數爲0)。

public void printCoolStuff(int number_of_lines, int number_of_characters){ 

    for(int i = 0; i < number_of_lines; i ++){ 

     String left= ""; 
     for(int j = 0; j < (2*i); j++){ 
      left= left+ "\" 
     } 

     String middle = ""; 
     for(int j = 0; j < (number_of_characters - 4*i); j++){ 
      middle = middle + "!" 
     } 

     String right= ""; 
     for(int j = 0; j < (2*i); j++){ 
      right = right + "/" 
     } 

     System.out.println(left+middle+right); 
    } 
} 
+0

爲什麼downvote? –

+2

太棒了!現在OP得到(可能)一個工作代碼而不學習一件事! – Pankaj

+0

雖然我明白答案..我試圖掌握使用Java。謝謝,男人! –

0

這樣好嗎?我也在學習java。反饋讚賞。

public class Problem3 { 
public static void main(String[] args) { 
    /** Code under here */ 
    int box = 22; 
    int line = 0; 
    String char_1 = "w"; 
    String char_2 = "q"; 
    String char_3 = "e"; 
    String string = ""; 
    for (int i = 0; i < 6; i++) { 
     for (int j = 0; j < line * 2; j++) { 
      System.out.print(char_1); 
     } 
     for (int k = box; k > 0; k --) { 
      System.out.print(char_2); 
     } 
     for (int l = 0; l < line * 2; l++){ 
      System.out.print(char_3); 
     } 
     System.out.println(string); 
     line++; 
     box = box - 4; 
    } 

} 

}