Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    creare una pagina di calendario

    Ciao a tutti,
    Sto tentando di fare una classe che: passata una data (anno,mese) mi stampa la "pagina " di quel mese a partire dal primo del mese all'ultimo giorno, io qualcosa ho fatto, non so se è giusto o se si può migliorare, la classe GregorianCalendar sono appena poche ore che la conosco,il mio problema è che non riesco a mettere i numeri dei giorni in corrispondenza delle lettere...non capisco se è solo un problema di stampa o bo......
    posto il mio codice e vi ringrazio.

    import java.io.*;
    import java.util.*;



    public class StampaMese{

    private static int NUM=31;


    private static int giornoDellaSettimana(int anno,int mese,int giorno){
    GregorianCalendar gc=new GregorianCalendar();
    gc.set(Calendar.YEAR,anno);
    gc.set(Calendar.MONTH,mese);
    gc.set(Calendar.DAY_OF_MONTH,1);
    int num=gc.get(Calendar.DAY_OF_WEEK);

    int start=num;


    switch (num){
    case Calendar.SUNDAY:
    System.out.println("DOMENICA");
    break;
    case Calendar.MONDAY:
    System.out.println("lUNEDI'");
    break;
    case Calendar.TUESDAY:
    System.out.println("MARTEDI'");
    break;
    case Calendar.WEDNESDAY:
    System.out.println("MERCOLEDI'");
    break;
    case Calendar.THURSDAY:
    System.out.println("GIOVEDI'");
    break;
    case Calendar.FRIDAY:
    System.out.println("VENERDI'");
    break;
    case Calendar.SATURDAY:
    System.out.println("SABATO");
    break;
    }
    System.out.print(start);
    return num;

    }








    public static void main(String[] args){
    GregorianCalendar gc=new GregorianCalendar();
    int anno=Keyboard.leggiInt("inserisci l'anno: ");
    int mese=Keyboard.leggiInt("inserisci il mese: ")-1;
    int giorno=1;



    //stampa dell'intestazione(nome dei giorni)
    int num=7;
    for(int i=1;i<=num;i++){

    switch (i){
    case Calendar.MONDAY:
    System.out.print(" l ");
    break;
    case Calendar.TUESDAY:
    System.out.print(" M ");
    break;
    case Calendar.WEDNESDAY:
    System.out.print(" M ");
    break;
    case Calendar.THURSDAY:
    System.out.print(" G ");
    break;
    case Calendar.FRIDAY:
    System.out.print(" V ");
    break;
    case Calendar.SATURDAY:
    System.out.print(" S ");
    break;

    case Calendar.SUNDAY:
    System.out.print(" D ");
    break;
    }

    }

    }

    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Sicuramente il codice è migliorabile, sia dal punto di vista della struttura che dal punto di vista dell'output generato.
    Una prima cosa da fare è stabilire quanti giorni ci sono nel mese (o per dirla in altro modo, quale è l'ultimo giorno del mese), se vuoi stamparli tutti. Vedi la mia risposta in questa discussione.

    Ma vuoi fare la stampa dei giorni in modo lineare/sequenziale?? O vuoi fare la classica "griglia" di N x 7 celle?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    mi interesserebbe d+ la griglia
    grazie.

  4. #4
    come faccio a dirgli da dove iniziare a stampare i numeri?

  5. #5
    potresti essere più preciso?? ( nn ti ho capito bene)
    cmq forse il tuo è un problema di "formattazione" di stampa...
    potresti usare \t (praticamente è il tabulatore) oppure in base alla jdk(dalla 1.5) che usi esiste il metodo printf

  6. #6
    praticamente hai capito bene, io vorrei stampare una griglia che contiene un mese di un anno che gli passo io, dal giorno che inizia il mese a quando finisce.

  7. #7
    Allora devi giocare un pò con

    System.out.print(" D \t");

    oppure se "vieni" dal C/C++ col printf


  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dom.vecchioni
    praticamente hai capito bene, io vorrei stampare una griglia che contiene un mese di un anno che gli passo io, dal giorno che inizia il mese a quando finisce.
    E quale è il problema esatto?? L'unica cosa, degna di nota, a cui devi stare attento è che il giorno della settimana viene fornito nel seguente modo: Calendar.SUNDAY (Domenica, =1), Calendar.MONDAY (=2) ecc....
    Se devi stampare la griglia partendo da sinistra con il Lunedì, devi fare qualche operazione matematica per sistemare la cosa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    ho provato a migliorare il mio codice,però devo dirgli che deve partire dalla riga 0,fino ad arrivare a 7, e dalla colonna j-esima che corrisponde al giorno della settimana in cui inizia il mese fino a fine mese,ma non riesco a capire perchè appena nei cicli for metto istruzioni tipo: for(int j=gc.get(Calendar.DAY_OF_WEEK);j<COL;j++) mi sfalsa tutto...non capisco l'errore. vi posto il mio codice un pochino migliorato...mille grazie

    import java.io.*;
    import java.util.*;



    public class StampaMese{

    private static int RIG =5;
    private static int COL =7;


    public static void main(String[] args){
    GregorianCalendar gc=new GregorianCalendar();
    int anno=Keyboard.leggiInt("inserisci l'anno: ");
    int mese=Keyboard.leggiInt("inserisci il mese: ");
    int giorno=1;
    System.out.println();

    gc.set(Calendar.YEAR,anno);
    gc.set(Calendar.MONTH,mese);
    gc.set(Calendar.DAY_OF_MONTH,giorno);

    //giorno della settimana in cui inizia il mese
    int n=gc.get(Calendar.DAY_OF_WEEK);
    System.out.println(n);

    //vedo se l'anno è bisestile
    boolean b=gc.isLeapYear(anno);
    System.out.println(b);


    String s="DOM LUN MAR MER GIO VEN SAB";
    System.out.print(s.toString());

    int[][] g=new int[RIG][COL];
    int i=0;
    int num=1;


    //stampa
    for(;i<RIG;i++){
    System.out.println();
    for(int j=0;j<COL;j++,num++){
    g[i][j]=num;
    if(num<=7) System.out.print(" "+num);
    else System.out.print(" "+num);
    System.out.print(" ");

    }

    }


    }


    }

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Io farei così:

    codice:
    import java.util.*;
    
    public class Calendario
    {
        public static void main (String[] args)
        {
            try
            {
                int mese = Integer.parseInt (args[0]);
                int anno = Integer.parseInt (args[1]);
    
                Calendar c = new GregorianCalendar (anno, mese-1, 1);
    
                int lastday = c.getActualMaximum (Calendar.DAY_OF_MONTH);
                int weekday = c.get (Calendar.DAY_OF_WEEK);
    
                System.out.println ("Lu Ma Me Gi Ve Sa Do");
    
                int day = 1 - (weekday + 5) % 7;
                int col = 0;
    
                while (day <= lastday)
                {
                    if (day >= 1)
                        System.out.format ("%2d ", day);
                    else
                        System.out.print ("   ");
    
                    day++;
    
                    if (++col == 7)
                    {
                        System.out.println ();
                        col = 0;
                    }
                }
    
                if (col > 0)
                    System.out.println ();
            }
            catch (Exception e)
            {
                System.out.println (e);
            }
        }
    }
    Provare passando 2 2008 come argomenti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.