Java - Cómo se crea este calendario simple en JAVA?

 
Vista:
Imágen de perfil de Marta

Cómo se crea este calendario simple en JAVA?

Publicado por Marta (13 intervenciones) el 14/10/2022 17:06:15
Hola, buenos días, el problema que se me plantea en uno de los ejercicios de clase es el siguiente:

Diseña una aplicación que sea capaz de mostrar el mes de septiembre como lo haría un calendario de papel, donde aparezcan filas y columnas incluyendo la primera fila con los nombres del día. Algo como el siguiente formato.

Captura-de-pantalla-2022-10-14-170736

Entiendo que es algo simple y no como los ejemplos que veo en Youtube de crear calendarios enormes.

Alguien sabe como se hace? Estoy muy perdida y no se como empezar. Muchas gracias!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Marta

Cómo se crea este calendario simple en JAVA?

Publicado por Marta (13 intervenciones) el 14/10/2022 19:56:56
Muchas gracias por la ayuda. Voy a ver si soy capaz de conseguirlo, aunque creo que es más simple de lo que me estoy imaginando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cómo se crea este calendario simple en JAVA?

Publicado por Kabuto (1383 intervenciones) el 14/10/2022 20:38:51
Pues no es tan fácil.
Vamos, tampoco hay que ser ingeniero, pero sí tiene su miga...
La consola en modo texto de Java es bastante limitada, así que conseguir cosas como esta requiere cierto esfuerzo.

Sobre todo, como bien te ha indicado Tom, habrá que saber sacarle partido al método printf() o bien al String.format() (en esencia sirven para lo mismo) para poder espaciar los datos en columnas formateadas.
Busca ejemplos sencillos de como usar este "formateo" para que lo entiendas y así pensar como poder aplicarlo para lo que quieres conseguir.

Comparte por aquí lo que consigas y si no has podido completarlo, a ver si podemos ayudarte.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Marta

Cómo se crea este calendario simple en JAVA?

Publicado por Marta (13 intervenciones) el 15/10/2022 21:03:37
Lo único que consigo es que pida el año, muestre septiembre y los nombres de los días de la semana. Pero luego no se como hacer para que salgan los días debajo o que al meter un año me muestre los días cambiados para ese mes. He visto en vídeo que con if o else se hace, pero yo no he visto aún en clase. Esta tarea la veo imposible.

import java.util.Scanner;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.println("Ingrese el año: ");

int año = sc.nextInt();

String mes = "Septiembre";

System.out.println("Mes: " + mes);
System.out.println("Lun\tMar\tMie\tJue\tVie\tSab\tDom");

}

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Cómo se crea este calendario simple en JAVA?

Publicado por Kabuto (1383 intervenciones) el 16/10/2022 00:12:28
¿Aún no te han explicado como usar if else?
Pues es lo más básico antes de intentar programar nada, la toma de decisiones según si se cumple una condición u otra es fundamental.

En este caso, quizás en realidad no están esperando que hagas nada especialmente complicado. Simplemente replicar el mes de septiembre de este año usando una serie de println() con tabuladores.
Vamos, lo que se llama "programación estructurada"
Algo como esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class CalendarioCutre {
 
	public static void main(String[] args) {
 
		System.out.println("      LUNES MARTES MIERCOLES JUEVES VIERNES SABADO DOMINGO");
		System.out.println("\t \t \t \t1\t2\t3\t4");
		System.out.println("\t8\t9\t10\t11\t12\t13\t14");
		System.out.println("\t15\t16\t17\t18\t19\t20\t21");
		System.out.println("\t22\t23\t24\t25\t26\t27\t28");
		System.out.println("\t29\t30");
 
	}
 
}

Yo he estado buscando una solución más avanzada, que imprima el mes de septiembre pero de cualquier año que queramos indicarle al programa.
E inevitablemente hay que utilizar if else (programacion alternativa) , hay que usar bucles (programación iterativa), hay que usar métodos (programación modular) y saber como usar clases avanzadas para el manejo de fechas en Java, ya sea Calendar o LocalDate, que me gusta un poco más..

Te dejo la solución que se me ha ocurrido, pero si dices que estas en un momento muy temprano de aprendizaje, probablemente te parecerá muy complejo.
Aún así consérvala de cara al futuro. Y si quieres, pregunta lo que quieras.

Un saludo Marta. ;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class Calendario {
 
	public static void main(String[] args) {
 
		int anio = 1613; //Indicamos el año que queramos
 
		LocalDate fecha = LocalDate.of(anio,9,1); //Nos situamos en el 1 de Septiembre
 
		System.out.println("      LUNES MARTES MIERCOLES JUEVES VIERNES SABADO DOMINGO");
 
		while (fecha.getMonthValue() == 9) { //Mientras el mes siga siendo Septiembre
			imprimeSemana(fecha); //Imprimimos esta semana
			fecha = fecha.plusDays(7);//Pasamos a la semana siguiente
		}
 
	}
 
	/*
	 * Método que recibe una fecha e imprime
	 * los dias de su actual semana.
	 * Los días se imprimen formateados para poder
	 * formar columnas
	 */
	private static void imprimeSemana(LocalDate fecha) {
 
		//Datos previos que necesitamos conocer
		int diaMes = fecha.getDayOfMonth(); //Dato que imprimimos en pantalla
		int diaSemana = fecha.getDayOfWeek().getValue(); //Nos dice si día actual es Lunes, o Martes, o...
 
		if (diaMes == 1) { //Primer dia del mes, la semana puede COMENZAR con espacios en blanco
			//La diferencia entre el dia de la semana y dia del mes
			//nos dirá cuantos espacios en blanco hay que poner al
			//comienzo de la semana
			int blancos = diaSemana - diaMes;
			for (int i = 0; i < 7; i++) {
				if (blancos > 0) {
					System.out.printf("\t%2s", " "); //Ponemos un "blanco"
					blancos--;//Y lo restamos del contador de "blancos"
				}
				else {//Ya no quedan "blancos" por poner
					System.out.printf("\t%2s", diaMes); //Imprimimos el dia
					diaMes++;//Y pasamos al dia siguiente
				}
			}
		}
		else {
			//No es el primer dia del mes, la semana puede TERMINAR con espacios en blanco
			for (int i = 0; i < 7; i++) {
				if (diaMes <= 30) { //Septiembre solo tiene 30 días, así que solo imprimimos si no hemos superado el dia 30
					System.out.printf("\t%2s", diaMes);
					diaMes++;
				}
			}
		}
		//Acabamos semana con un salto de línea
		System.out.println();
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Marta

Cómo se crea este calendario simple en JAVA?

Publicado por Marta (13 intervenciones) el 16/10/2022 00:19:32
Aún no nos han explicado en clase los bucles, es en el siguiente tema, por eso creo en ese título piden algo como el primer ejemplo que yo ya lo había hecho pero de forma más cutre.

Guardaré ese código que has compartido para cuando avance en mi aprendizaje :)

Muchas gracias por la ayuda!!! ^ ^
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar