Código escrito en java

Estoy intentando imprimir la cantidad de entrada del usuario de "*" en la misma línea.

Esto es lo que tengo:

if (((input / 2) + 1) == ir) {
    for (int ij = 1 ; ij <= input; ij++) {
        System.out.print("*");
    }
}

La instrucción if está probando para ver si estamos en el punto medio de la forma que estoy tratando de hacer (una pajarita).

Siento que mi lógica y código son correctos, pero para una entrada de 5,

Esta línea en particular se ve así: ***

En lugar de: *****

¿Alguien puede explicarme por qué sucede esto?

Aquí está el código completo:

import java.util.Scanner;

public class BowTie {
  public static void main(String [] args) {
    Scanner scnr = new Scanner(System.in);
    int input = scnr.nextInt();

    int stars = 1;
    int spaces = input - 2;
    if ((input % 2 == 1) && (input >= 1)) {
        for (int ir = 1; ir <= input; ir++) {
            for (int ic = 1; ic <= stars; ic++) {
                System.out.print("*");
            }
            for (int ic = 1; ic <= spaces; ic++) {
                if (((input / 2) + 1) == ir) {
                    for (int ij = 1; ij <= input; ij++) {
                        System.out.print("*");
                    }
                } else {
                    System.out.print(" ");
                }
            }
            if (((input + 1) / 2) != ir) {
                for (int ic = 1; ic <= stars; ic++) {
                    System.out.print("*");
                }
            }
            if ((input / 2) < ir) {
                stars--;
                spaces += 2;
            } else {
                stars++;
                spaces -= 2;
            }
            System.out.println();
        }
    } else {
        return;
    }
    scnr.close();
  }
}
4
pjrahal 5 oct. 2021 a las 03:13

2 respuestas

La mejor respuesta

Falta la condición else en if (((input + 1) / 2) != ir) de la siguiente manera:

import java.util.Scanner;

public class BowTie {
  public static void main(String [] args) {
    Scanner scnr = new Scanner(System.in);
    int input = scnr.nextInt();

    int stars = 1;
    int spaces = input - 2;
    if ((input % 2 == 1) && (input >= 1)) {
        for (int ir = 1; ir <= input; ir++) {
            for (int ic = 1; ic <= stars; ic++) {
                System.out.print("*");
            }
            for (int ic = 1; ic <= spaces; ic++) {
                if (((input / 2) + 1) == ir) {
                    for (int ij = 1; ij <= input; ij++) {
                        System.out.print("*");
                    }
                } else {
                    System.out.print(" ");
                }
            }
            if (((input + 1) / 2) != ir) {
                for (int ic = 1; ic <= stars; ic++) {
                    System.out.print("*");
                }
            // Added else
            } else {
                for (int ic = 1; ic <= (input - ir); ic++) {
                    System.out.print("*");
                }
            }
            if ((input / 2) < ir) {
                stars--;
                spaces += 2;
            } else {
                stars++;
                spaces -= 2;
            }
            System.out.println();
        }
    } else {
        return;
    }
    scnr.close();
  }
}

Sin embargo, su código es un poco difícil de leer y comprender. Es posible que deba refactorizarlo un poco.

1
João Dias 5 oct. 2021 a las 02:21

Esto se debe a los cheques que usó. Para ser breve, consulte este script modificado:

import java.util.Scanner;

public class BowTie {
  public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    int input = scnr.nextInt();

    int stars = 1;
    int spaces = input - 2;
    if ((input % 2 == 1) && (input >= 1)) {
        for (int ir = 1; ir <= input; ir++) {
          
            if (((input + 1) / 2) != ir) { // add this check
              for (int ic = 1; ic <= stars; ic++) {
                  System.out.print("*");
              }
            }
            // change this logic: ---
            if (((input + 1) / 2) == ir) {
              for(int ic = 1; ic <= input; ic++) {
                System.out.print("*");
              }
            } else {
              for (int ic = 1; ic <= spaces; ic++) {
                System.out.print(" ");
              }
            }
            // ---
            if (((input + 1) / 2) != ir) {
                for (int ic = 1; ic <= stars; ic++) {
                    System.out.print("*");
                }
            }
            if ((input / 2) < ir) {
                stars--;
                spaces += 2;
            } else {
                stars++;
                spaces -= 2;
            }
            System.out.println();
        }
    }
    scnr.close();
  }
}

(las líneas con comentarios fueron los cambios)

La primera for dentro de for (int ir = 1; ir <= input; ir++) fue imprimir las estrellas que ves.
Además, la parte del medio se cambió para imprimir la línea completa o los espacios (como lo hizo).

0
RCC 5 oct. 2021 a las 02:19