Codigo escrito en java
Estoy tratando de 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 declaració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 mi código son correctos, pero para una entrada de 5,
esta línea en particular se ve así: ***
en vez 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(); } }Te 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 entender. Es posible que deba refactorizarlo un poco.
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(); } }(líneas con comentarios fueron los cambios)
El primero for inside for (int ir = 1; ir <= input; ir++) estaba imprimiendo las estrellas que ves.
Además, la parte central se cambió para imprimir la línea completa o los espacios (como hiciste tú).