2023-02-25 15:26:39 +00:00
package aula03 ;
import utils.UserInput ;
import java.util.Scanner ;
// Solução do exercício 5
public class Calendar {
public static void main ( String [ ] args ) {
// Data contains: {month, year, firstDay}
int [ ] data = getValues ( ) ;
int monthDays = monthDays ( data [ 0 ] , data [ 1 ] ) ;
printCalendar ( data , monthDays ) ;
System . out . println ( ) ;
}
private static int [ ] getValues ( ) {
Scanner sin = new Scanner ( System . in ) ;
System . out . print ( " Introduza o mês/ano no formato mm/yyyy: " ) ;
String [ ] monthYear = sin . next ( ) . split ( " / " ) ;
System . out . print ( " 1 = Segunda \ n2 = Terça \ n3 = Quarta \ n4 = Quinta \ n5 = Sexta \ n6 = Sábado \ n7 = Domingo \ nIntroduza o dia da semana em que começa o mês (1 a 7): " ) ;
int firstDay = ( int ) UserInput . getNumberBetween ( sin , 1 , 7 ) ;
sin . close ( ) ;
return new int [ ] { Integer . parseInt ( monthYear [ 0 ] ) , Integer . parseInt ( monthYear [ 1 ] ) , firstDay } ;
}
private static int monthDays ( int month , int year ) {
switch ( month ) {
case 2 :
if ( year % 100 = = 0 ? year % 400 = = 0 : year % 4 = = 0 )
return 29 ;
else
return 28 ;
case 4 :
case 6 :
case 9 :
case 11 :
return 30 ;
default :
return 31 ;
}
}
private static void printCalendar ( int [ ] data , int monthDays ) {
2023-02-26 14:03:12 +00:00
String [ ] monthNames = { " Janeiro " , " Fevereiro " , " Março " , " Abril " , " Maio " , " Junho " , " Julho " , " Agosto " , " Setembro " , " Outubro " , " Novembro " , " Dezembro " } ;
System . out . printf ( " \ n%15s %d \ n " , monthNames [ data [ 0 ] - 1 ] , data [ 1 ] ) ;
2023-02-25 15:26:39 +00:00
System . out . println ( " Dom Seg Ter Qua Qui Sex Sab " ) ;
if ( data [ 2 ] ! = 7 )
for ( int i = 0 ; i < data [ 2 ] ; i + + )
System . out . print ( " " ) ;
for ( int monthDay = 1 ; monthDay < = monthDays ; monthDay + + ) {
System . out . printf ( " %3d " , monthDay ) ;
if ( ( monthDay + data [ 2 ] ) % 7 = = 0 )
System . out . println ( ) ;
}
}
}