2017-09-21 30 views
0

私は、上に行く横のピラミッドになる数字のピラミッドを作成する必要があります。しかしJavaのピラミッドが2になる

pic1

、I(私は++)または(J ++)のいずれかを用いて約混乱、それは例えば二回ピラミッドの各ラインを繰り返すことになりますいずれかのとき:この絵を見て、この絵のよう1 1 13 13を:

pic2

どのように各行が繰り返されるのを止めることができますか?しかし、2のように画像1にもどりますか?ここに私のコードです:

System.out.println("What number would you like?"); 
    int x = input.nextInt(); 
    System.out.println("Would you like 1. odd 2. even 3.both types of numbers? Please enter the NUMBER"); 

    int numbertype = input.nextInt(); 
    int y; 
    //ODD 
    if (numbertype == 1) { 
     y = 2; 

     for (int i = 1; i <= x; i++) { 
      for (int j = 1; j <= i; j+=2) { 
       System.out.print(j); 
      } 
      System.out.print("\n"); 
     } 
     for (int p = x; p >= 1; p--) { 
      for (int r = 1; r <= p; r+=2) { 
       System.out.print(r); 
      } 
      System.out.print("\n"); 
     } 
    } 

助けてくれれば幸いです!

+0

あなたのコードをより小さくて簡単な方法に分割することを強くお勧めします。引数に基づいて '1'、' 1 3'または '1 3 5'を出力するメソッドを作成します。次に、そのメソッドを1つまたは2つの 'for'ループに入れます – Fureeish

答えて

0

これは単一のループで実行できます。 forループを使い始める前に、もっと簡単な解決法を見つけようとするのがよいでしょう。ここで

int i = 1; 
while (i >= 1) { 
    IntStream si = IntStream.rangeClosed(1, i); 
    String s = si.mapToObj(Integer::toString).collect(Collectors.joining(" ")); 
    System.out.println(s); 
    i += y; 
    if (i > x) { 
     i -= 2*y; 
     y = -y; 
    } 
} 

iは1からyによってxインクリメントに実行されます(私はあなたの代わりに、一定のものを使用していたと仮定します)。 xが超過すると、iは下げられ、yを否定することによって同じ額を減額します。もう1つのコードはint型の範囲を作成して結合するだけです。

関連する問題