2014-10-11 31 views
1

我是java新手,並且參加了一個介紹課程。使用嵌套循環在java中創建一個包含星號的框

我已經能夠找出我的問題的大部分,但我被困在最後一步。

最終的結果應該是這樣使用四個或更少或者是System.out.print System.out.println語句:

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

,我創造了這個

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

這是我的代碼。有什麼你們可以看到,可以幫助嗎?

public class StarPatterns { 
    public static void main(String[] args) { 
     int col; 
     int row; 

     for (row = 6; row >= 0 ; row--) { 
      if (row >= 0) 
       System.out.print("*"); 

      for (col = row; col < 6; col++) { 
       System.out.print(" "); 
      } 

      for (col = row; col > 0; col--) { 
       System.out.print("*"); 
      } 

      System.out.println(); 
     } 
    } 
} 
+1

什麼確切的要求是什麼?您可以使用一個只包含整個輸出的println來完成此操作。 – jonderry 2014-10-11 21:01:33

+0

他們想要循環來創建圖像。 – dcit17 2014-10-11 21:03:00

回答

2
public class stars { 

    public static void main(String[] args) { 

    int row = 7; 
    int col = 7; 
    int count; 

    for (int i=0;i<row;i++) 
    { 
     count = i; 
     System.out.print("*"); 
     for (int c=1;c<col;c++) 
     { 
      if (count == 0 || count == row-1) 
      { 
       System.out.print("*"); 
      } 
      else 
      { 
       System.out.print(" "); 
       count--; 
      } 
     } 
     System.out.println(""); 
    } 

} 

4 System.out的打印:

enter image description here

更新:

3 System.out的打印:

public static void main(String[] args) { 

     int row = 7; 
     int col = 7; 
     int count; 

     for (int i=0;i<row;i++) 
     { 
      count = i; 
      //System.out.print("*"); 
      for (int c=0;c<col;c++) 
      { 
       if (count == 0 || count == row-1 || c == 0) 
       { 
        System.out.print("*"); 
       } 
       else 
       { 
        System.out.print(" "); 
        count--; 
       } 
      } 
      System.out.println(""); 
     } 

    } 

可能不是最佳的(存儲器使用)bu

使用2個System.out的打印:

public static void main(String[] args) { 

     int row = 7; 
     int col = 7; 
     int count; 
     String strNewLine = "*" + System.lineSeparator(); 
     String str = "*"; 
     String strToPrint; 

     for (int i=0;i<row;i++) 
     { 
      count = i; 
      for (int c=0;c<col;c++) 
      { 
       if (count == 0 || count == row-1 || c == 0) 
       { 
        if (c == row-1) 
        { 
         strToPrint = strNewLine; 
        } 
        else 
        { 
         strToPrint = str; 
        } 

        System.out.print(strToPrint); 
       } 
       else 
       { 
        System.out.print(" "); 
        count--; 
       } 
      } 
     } 

    } 
+0

非常感謝。我從來沒有想過使用count變量來完成這一點。 – dcit17 2014-10-11 21:05:40

+0

沒問題,我用4,3和2 System.out.print編輯了我最後的解決方案。 – 2014-10-11 21:11:42

1

編輯:噸邏輯也許不錯缺少一個:固定

你覺得那是什麼:

public static void main(String[] args) { 
    for (int row=0; row<7; row++) { 
     for (int col=0; col<7; col++) { 
      System.out.print((col == 0) || (row == 6) || (col > row) ? "*" : " "); 
     } 
     System.out.println(); 
    } 
} 

結果是:

******* 
* ***** 
* **** 
* *** 
* ** 
*  * 
******* 
+0

技術上不是正確的輸出,因爲它應該是7行而不是6,除非你故意改變它,但它確實得到了正確的想法。 – 2014-10-11 21:12:57

+0

@WordsLikeJared:你是對的,錯過了一行一列:固定... – 2014-10-11 21:21:58

0

你能做到在1無三元運營商,因爲我認爲你沒有學過,但(或者你使用它們至少你的教練會不喜歡):

public class StarPatterns { 
    public static void main(String[] args) { 
     int col; 
     int row; 

     for (row = 0; row < 7; row++) { 
      for (col = 0; col < 7; col++) { 
       String symbol = " "; 
       if (row == 0 || col == 0 || col > row || row == 6) { 
        symbol = "*"; 
       } 

       if (col == 6) { 
        symbol += System.getProperty("line.separator"); 
       } 

       System.out.print(symbol); 
      } 
     } 
    } 
} 

輸出:

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