Dibujar piramide con texto(*) en java

shako

Pos tengo problemillas con un ejercicio, estoy en 1dai (fp) y en java tenemos este ejercicio

Dada una altura, genere una piramide con *

ej:
  *
  
  *

el problema que tengo es que aun no tengo dominio de println y printf suficiente como para hacerlo y sinceramente este ejercicio con while y recursividad me tiene un poco amargado, no encuentro la forma(llevamos solo 2 meses con java, tampoco es q sepa mucho)

no espero que me paseis el codigo solo necesito un cable :)

motivational: noobs can't triforce, with this we should be abel to mutipleforce XD

gracias de hantebrazo!

shaba

import java.io.*;

public class Piramide {

public static void main(String args[]) throws IOException {

    BufferedReader entrada = new BufferedReader(
        new InputStreamReader(System.in));

    System.out.print("Entra la altura : " );
    int altura = Integer.parseInt(entrada.readLine());

    System.out.println();

    int esp=altura-1;
    int ast = 1;
    for (int i=0; i<altura; i++) {
        for (int j=0; j<esp; j++) {
            System.out.print(' ' );
        }
        for (int j=0; j<ast;j++) {
            System.out.print('*' );
        }
        System.out.println();
        esp--;
        ast += 2;
    }
}

}
PD: no es mío

Thanat0s

#1 Y añado, en cualquier tipo de problema que quieren que hagas una pirámide, ya puede ser de número, símbolos o lo que sea, vas a tener dos bucles, normalmente dos fors.

for
{
for
{
En el bucle más interno siempre imprimirás lo que va a ir en la misma línea con print, sin salto de línea.
}
Al salir del bucle más interno imprimirás el salto de línea, para tener tantas líneas como vueltas da el bucle.
}

No creo que te hayan pedido esto con recursividad, es algo más complejo de hacer y de entender para alguien que sólo lleva 2 meses dando programación.

Shendraf

Efectivamente, la clave está en:

  • 2 bucles for
  • NO uses recursividad cuando no sea necesaria
  • printf es de C
shako

antes q nada gracias ^^

bueno, el problema q tenia era que nos habian enseñado pirntln(que genera salto de linea) y no sabia que out.print(); me dejaba mostrar texto sin el salto de linea xD

yo rallandome un huevo por eso xD

#4 en cuanto a printf, si es de C, pero java lo copio para que los programadores que se pasaban a java no tubieran pegas a la hora de mostrar texto ^^

JuAn4k4
public static void main(String args[]) {

  StringBuilder out = new StringBuilder();

  // controla excepciones aquí si quieres para mostrar mensaje de error
  int altura = Integer.parseInt(args[1]); // esto era así ?
 
  // Teniendo en cuenta que iteramos al reves ( de altura ....  hasta 1 )
  // espacios en blanco = (altura - iteración); 
  // numero  de estrellas = iteración*2 -1  = (altura - espaciosBlanco) * 2 -1 


 for (int i =altura-1; i>=0; i--) {
      pintaCaracter(out,i," ");
     pintaCaracter(out,(altura - i)*2 - 1, "*");
 } 

 System.out.println(out.toString());
}

 /**
 * Pintar i espacios en out.
 */
 private void pintaEspacios(StringBuilder out , int i, String c) {
   for (int j = 0; j<i; j++) {
     out.append(c);
  }
}



`
Esmoris

Yo t lo se poner en C , en java aun no lo e dado xD

5star

#1 Los ejercicios de piramides son más fáciles de lo que tú crees, solo es questión de saber organizar, me explico:
Teniendo un triangulo como la siguiente imagen, tienes que dividir la piramide por partes

Te dejo el codigo en c++ que en java no cambia nada en cuanto a las funciones de for, por lo tanto con que recortes las partes de for ya te sirve para java.

#include <stdio.h>
#include <conio.h>

int calcular(int num);
main(){
int num;


   printf("Introduzca el numero \n" );
   scanf("%i", &num);
   calcular(num);
   getch();
   }

int calcular(int num){
int i, j;
for(i=num; i>=0; i--){
for(j=0; j<=num; j++){
if(j>=i){printf("%i",j);}
else printf("." );
}
for(j=num-1; j>=0; j--){
if(j>=i){printf("%i",j);}
else printf("." );
}
printf("\n" );
}


                  for(i=1; i<=num; i++){
                                        for(j=0; j<=num; j++){
                                                              if(j>=i){printf("%i", j);}
                                                              else printf("." );
                                                              }
                                        for(j=num-1; j>=0; j--){
                                                                if(j>=i){printf("%i", j);}
                                                                else printf("." );
                                                                }
                                        printf("\n" );
                                        }
                  }

Usuarios habituales

  • 5star
  • Esmoris
  • JuAn4k4
  • shako
  • Shendraf
  • Thanat0s
  • shaba