2016-11-22 69 views
-5

我有這些代碼用於奇數打印沙漏。我需要奇數和偶數才能工作。請幫助java-沙漏模式輸入不能在偶數上工作

int nRows = 4; 

for(int i=0; i < nRows/2; i++) { 
    for(int j = nRows - i; j < nRows; j++) { 
     System.out.print(" "); 
    } 
    for(int j = 0; j < nRows - 2*i; j++) { 
     System.out.print("*"); 
    } 
    System.out.println(); 
} 


for(int i=0; i < (nRows+1)/2; i++) 
{ 
    for(int j = 1; j <= nRows/2 - i; j++) 
     System.out.print(" "); 
    for(int j = 0; j <= i*2; j++) 
     System.out.print("*"); 
    System.out.println(); 
} 
} 

我的輸出是

**** 
** 
    * 
*** 

和輸出應該是

**** 
** 
**  
**** 
+1

請添加一些更多的細節......像什麼是預期的輸出和輸出什麼你越來越... –

+0

看着你的預期輸出,當'even'需要2個不同的情況''n''和'n'時感謝幫助.. –

回答

0

我認爲你想有一個數字看起來像下面的一個n=6

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

下面是一個簡單的代碼來解決這個問題:

class Main { 
    public static void main(String[] args) { 
    int nRows = 6; 

    if(nRows%2==0) 
    { 
     hourGlassEven(nRows/2); 
    } 
    else 
    { 
     hourGlassOdd((nRows/2)+1); 
    } 
    } 
    public static void hourGlassOdd(int nRows) 
    { 
    int i,j,k,l; 

    for(i=0;i<nRows;i++) 
    { 
     for(j=0;j<i;j++) 
     { 
     System.out.print(" "); 
     } 
     for(k=0;k<nRows-i;k++) 
     { 
     System.out.print("*"); 
     } 
     for(l=0;l<nRows-i-1;l++) 
     { 
     System.out.print("*"); 
     } 
     System.out.println(); 
    } 

    for(i=0;i<nRows-1;i++) 
    { 
     for(j=0;j<nRows-i-2;j++) 
     { 
     System.out.print(" "); 
     } 
     for(k=0;k<i+2;k++) 
     { 
     System.out.print("*"); 
     } 
     for(l=0;l<i+1;l++) 
     { 
     System.out.print("*"); 
     } 
     System.out.println(); 
    } 
    } 
    public static void hourGlassEven(int nRows) 
    { 
    int i,j,k,l; 

    for(i=0;i<nRows;i++) 
    { 
     for(j=0;j<i;j++) 
     { 
     System.out.print(" "); 
     } 
     for(k=0;k<nRows-i;k++) 
     { 
     System.out.print("*"); 
     } 
     for(l=0;l<nRows-i;l++) 
     { 
     System.out.print("*"); 
     } 
     System.out.println(); 
    } 

    for(i=0;i<nRows;i++) 
    { 
     for(j=0;j<nRows-i-1;j++) 
     { 
     System.out.print(" "); 
     } 
     for(k=0;k<i+1;k++) 
     { 
     System.out.print("*"); 
     } 
     for(l=0;l<i+1;l++) 
     { 
     System.out.print("*"); 
     } 
     System.out.println(); 
    } 
    } 
} 

編輯:增加你的邏輯,連號太多!看看

+0

..但高度和寬度應該與nRows相同 – Marke

+0

@Marke:我已經添加了你的邏輯!請看看 –

+0

謝謝@User_Targaryen!我已經嘗試了以下和它的工作。 – Marke

1

使第二個for循環的一些變化,並應用相同的繪圖邏輯

http://ideone.com/U1xJWv

int nRows = 14; 

for(int i=0; i < nRows/2; i++) { 
    for(int j = nRows - i; j < nRows; j++) { 
    System.out.print(" "); 
    } 
    for(int j = 0; j < nRows - 2*i; j++) { 
    System.out.print("*"); 
    } 
    System.out.println(); 
} 


for(int i=nRows/2 -1; i >=0; i--) // based on first half, in reverse order 
{ 
    for(int j = nRows - i; j < nRows; j++) { 
    System.out.print(" "); 
    } 
    for(int j = 0; j < nRows - 2*i; j++) { 
    System.out.print("*"); 
    } 
    System.out.println(); 
} 
+0

它適用於偶數!非常感謝@hermant – Marke