2016-10-30 3 views
-1

Ich muss eine numerische Pyramide mit Java ausdrucken. das zählt in Vielfachen von 2 zusammen mit den Räumen wie darunter. aber der Code ich habe es nur ein Vielfaches von 1 ohne Leerzeichen.numerische Pyramide in Java.

     1 
        1 2 1 
       1 2 4 2 1 
      1 2 4 8 4 2 1 
     1 2 4 8 16 8 4 2 1 
    1 2 4 8 16 32 16 8 4 2 1 
1 2 4 8 16 32 64 32 16 8 4 2 1 

das ist mein Code.

import java.util.Scanner; 

public class NumericPyramid { 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 

     //Taking noOfRows value from the user 

     System.out.println("How Many Rows You Want In Your Pyramid?"); 

     int noOfRows = sc.nextInt(); 

     //Initializing rowCount with 1 

     int rowCount = 1; 

     System.out.println("Here Is Your Pyramid"); 

     //Implementing the logic 

     for (int i = noOfRows; i > 0; i--) { 
      //Printing i*2 spaces at the beginning of each row 

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

      //Printing j value where j value will be from 1 to rowCount 

      for (int j = 1; j <= rowCount; j++) { 
       System.out.print(j+" "); 
      } 

      //Printing j value where j value will be from rowCount-1 to 1 

      for (int j = rowCount-1; j >= 1; j--) {     
       System.out.print(j+" ");    
      }       

      System.out.println(); 

      //Incrementing the rowCount 

      rowCount++; 
     } 
    } 
} 

Ausgang:

How Many Rows You Want In Your Pyramid? 

7 

Here Is Your Pyramid 

       1 

      1 2 1 

      1 2 3 2 1 

     1 2 3 4 3 2 1 

     1 2 3 4 5 4 3 2 1 

    1 2 3 4 5 6 5 4 3 2 1 

    1 2 3 4 5 6 7 6 5 4 3 2 1 
+2

Was würde passieren, wenn jedes Mal, wenn Sie Erhöhe 'j' um eins, du verdoppelst es stattdessen? Und jedes Mal, wenn Sie 'j' um eins verringern, halbieren Sie es stattdessen? –

+0

was meinst du ?. – zeogold

+0

@DavidWallace Ich sehe, was Sie dort getan haben (͡ ° ͜ʖ ͡ °), OP tut (leider) nicht – Turing85

Antwort

2

Für jedes j von 1 bis n Sie 2^j schreiben müssen. Momentan schreibst du nur j. Also Schreib-Funktion, die für gegebene k 2^k zurückgibt.

EDIT: Für größere n Sie müssen BigInteger verwenden:

import java.math.BigInteger; 

public class NumericPyramid { 
    private static BigInteger pow(int exponent) { 
     BigInteger result = new BigInteger("1"); 
     BigInteger two = new BigInteger("2"); 
     for (int i = 0; i < exponent; i++) { 
      result = result.multiply(two); 
     } 
     return result; 
    } 

und es sowohl für Loops verwenden. Ersetzen

System.out.print(j+" "); 

mit

System.out.print(pow(j)+" "); 
+0

Wäre nicht "1 << j" einfacher als die Implementierung einer vollständigen 'pow()' Methode? Und der Parameter zu 'pow()' ist nicht die * Basis *, sondern der * Exponent *. Die Basis ist fest auf 2 codiert. – Andreas

+0

der Powder gab mir einen Fehler – zeogold

0

die Pyramide geht 1 2 4 8 16, das ist eine Folge von 1 * 2 = 2, 2 * 2 = 4, 4 * 2 = 8 und so weiter, und geht dann invers, 8/2 = 4, 4/2 = 2, 2/2 = 1, können Sie nur durch 2 und durch 2 multiplizieren müssen, wenn das Zentrum

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

Was ist der Punkt von 'i * 2/2'? Es ist dasselbe wie "ich". Multiplikation mit 2 und Division durch 2 ergibt die ursprüngliche Zahl (sofern sie nicht übergelaufen ist). – Andreas

+0

@Andreas Sie haben Recht, mit nur 'i' wird der Trick –

+0

, dass nur die rechte Hälfte der Pyramide tat – zeogold