Ciao a tutti! Ho un problema con il seguente codice
codice:
    private static String[] nomiMesi = {"Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"};
    private static String[] nomiGiorni = {"Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"};
    private GregorianCalendar dataAttuale;
    private int settimana;
    
    /**Questo costruttore crea un'istanza della classe impostando la data del 
     * calendario a quella passata come parametro
     * 
     * @param dataAttuale 
     */
    public Calendario(GregorianCalendar dataAttuale) {
        this.dataAttuale = dataAttuale;
        settimana = dataAttuale.get(Calendar.WEEK_OF_MONTH);
    }
    
    /**Questo costruttore crea un'istanza della classe impostando la data del 
     * calendario a quella corrente
     * 
     */
    public Calendario() {
        GregorianCalendar dataCorrente = new GregorianCalendar(Locale.ITALIAN);
        this.dataAttuale = dataCorrente;
        settimana = dataCorrente.get(Calendar.WEEK_OF_MONTH);
    }

public String stampaCalendario() {
        System.out.println(">>> " + dataAttuale.get(Calendar.DATE) + " " + nomiMesi[dataAttuale.get(Calendar.MONTH)] + " " + dataAttuale.get(Calendar.WEEK_OF_MONTH));
        
        
        String calendario = "";
        
        // stampo il mese e l'anno attuale
        int mese = dataAttuale.get(Calendar.MONTH);
        calendario = calendario.concat(nomiMesi[mese % 12] + " " + dataAttuale.get(Calendar.YEAR) + "\n");
        
        // stampo le intestazioni dei giorni del calendario
        for (int i = 0; i < nomiGiorni.length; i++) {
            calendario = calendario.concat(nomiGiorni[i] + "\t");
        }
        calendario = calendario.concat("\n");
        
        // mi allineo con il nome del primo giorno del mese
        Calendar cal = Calendar.getInstance(Locale.ITALIAN);
        cal.set(dataAttuale.get(Calendar.YEAR), dataAttuale.get(Calendar.MONTH), 0);
        int primoMese = cal.get(Calendar.DAY_OF_WEEK);
        for (int i = 0; i < primoMese-1; i++) {
            calendario = calendario.concat("\t");
        }
        
        // stampo i giorni fino all'ultimo del mese
        int ultimoMese = dataAttuale.getMaximum(Calendar.DAY_OF_MONTH);
        for (int i = 1; i <= ultimoMese; i++) {
            calendario = calendario.concat(i + (i == dataAttuale.get(Calendar.DATE) ? "*" : "") + "\t");
            
            // se domenica torno al primo giorno della settimana 
            if ((i + primoMese) % 7 == Calendar.SUNDAY) {
                calendario = calendario.concat("\n");
            }
        }
        calendario = calendario.concat("\n");
        
        return "";//calendario;
    }
In pratica dovrei stampare un calendario nel quale evidenziare la settimana corrente, ma in alcuni mesi come settembre, novembre e dicembre del 2011 tutto funziona correttamente, mentre ad esempio con ottobre prossimo la settimana risulta sfalsata di 1.
Sapreste dirmi il motivo dell'anomalia?
Grazie infinite.