2016-11-22 5 views
-5

奇数の砂時計を印刷するためのコードがあります。私は奇妙でも仕事でも必要です。 plsは私の出力が偶数に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(); 
} 
} 

を支援し、出力は、私はあなたが数字がn=6については、以下のいずれかのよう見たいと思って

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

を適用する必要があり、予想される出力であり、どのような出力あなたが何であるかのようないくつかの詳細を...追加してください。取得中... –

+0

期待される出力を見ると、「偶数」の場合は「n」、奇数の場合は「n」の2つの異なるケースが必要です –

答えて

0

次のようになります。

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

ここではそれを解決するための簡単なコードです:

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

@マーカー:私はあなたのロジックを追加しました!どうぞご覧ください –

+0

ありがとう@User_Targaryen!私は次のこととその作業を試みました。 – Marke

1

がループする第二中にいくつかの変更を行い、同じ描画ロジックに

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

関連する問題