chi mi da la mano con la spiegazione di questo programma è un calendario che inserendo la data da riga di comando mi da il giorno esatto es 14 luglio 1900 mi da che è lunedi mi servirebe la spiegazione qui c'è il codice

codice:
import java.io.*;
import java.util.StringTokenizer;

public class Gregoriano
{
	// Sezione pubblica 
	
	public Gregoriano() throws IOException
	{
		secolo = new String[29][5];
		fileSecolo = new BufferedReader(new FileReader("Secolo.txt"));
		
		anno = new String[29][4];
		fileAnno = new BufferedReader(new FileReader("Anno.txt"));
		
		mese = new String[7][7];
		fileMese = new BufferedReader(new FileReader("Mese.txt"));
		
		giorno = new String[7][7];
		fileGiorno = new BufferedReader(new FileReader("Giorno.txt"));
		
		setupSecolo();
		setupAnno();
		setupMese();		
		setupGiorno();
	}
	
	
	
	public String calcola(String giorno, String mese, String anno)
	{	
		int i = 0, j = 0;		
		int ianno = 0, janno = 0;
		boolean found = false;
		String letteraSecolo = null;
		int colonnaMese = 0;
		int imese = 0;
		String di = null;
		
		// Cerco prima nella matrice anno la corrispondenza con le ultime 2 cifre
		while (i < 29 && !found) {
			while (j < 4 && ! found)
				{
					if (this.anno[i][j].equals(anno.substring(2,4))) {						
						ianno = i;
						janno = j;
						found = true;	
					}
					j++;
				}
			j = 0;		
			i++;
		}
		
					
		// 1500 => 1^ colonna
		if (anno.substring(0,2).equals("15"))
			letteraSecolo = secolo[ianno][0];
		// 1600 - 2000 => 2^ colonna
		if (anno.substring(0,2).equals("16") || anno.substring(0,2).equals("20"))
			letteraSecolo = secolo[ianno][1];
		// 1700 - 2100 => 3^ colonna
		if (anno.substring(0,2).equals("17") || anno.substring(0,2).equals("21"))
			letteraSecolo = secolo[ianno][2];
		// 1800 - 2200 => 4^ colonna
		if (anno.substring(0,2).equals("18") || anno.substring(0,2).equals("22"))
			letteraSecolo = secolo[ianno][3];
		// 1900 - 2300 => 3^ colonna
		if (anno.substring(0,2).equals("19") || anno.substring(0,2).equals("23"))
			letteraSecolo = secolo[ianno][4];	
			
		
		// controllo per l'anno bisestile	
		if (letteraSecolo.length() == 2)
		{
			if (mese.equals("febbraio"))
				letteraSecolo = letteraSecolo.substring(0,1);				
			else 
				letteraSecolo = letteraSecolo.substring(1,2);				
		}
	
		
		// controllo il mese (passato come argomento)
		if (mese.equals("gennaio") || mese.equals("ottobre"))
			imese = 0;
		if (mese.equals("febbraio") || mese.equals("marzo") || mese.equals("novembre"))
			imese = 1;	
		if (mese.equals("aprile") || mese.equals("luglio"))
			imese = 2;
		if (mese.equals("maggio"))
			imese = 3;
		if (mese.equals("giugno"))
			imese = 4;		
		if (mese.equals("agosto"))
			imese = 5;
		if (mese.equals("settembre") || mese.equals("dicembre"))
			imese = 6;
		
		// cerco nella matrice mese la lettera del secolo	
		j = 0;			
		found = false;		
		while (j < 7 && !found) {
			if (this.mese[imese][j].equals(letteraSecolo))
				{
					found = true;
					colonnaMese = j;				
				}
			j++;
		}
		
		// calcolo il giorno
		if (giorno.equals("1") || giorno.equals("8") || giorno.equals("15") ||
			giorno.equals("22") || giorno.equals("29"))
			di = this.giorno[0][colonnaMese];
		
		else
	
		if (giorno.equals("2") || giorno.equals("9") || giorno.equals("16") ||
			giorno.equals("23") || giorno.equals("30"))
			di = this.giorno[1][colonnaMese];
		
		else
		
		if (giorno.equals("3") || giorno.equals("10") || giorno.equals("17") ||
			giorno.equals("24") || giorno.equals("31"))
			di = this.giorno[2][colonnaMese];
		
		else
				
		if (giorno.equals("4") || giorno.equals("11") || giorno.equals("18") ||
			giorno.equals("25"))
			di = this.giorno[3][colonnaMese];
		
		else
			
		if (giorno.equals("5") || giorno.equals("12") || giorno.equals("19") ||
			giorno.equals("26"))
			di = this.giorno[4][colonnaMese];
			
		else
		
		if (giorno.equals("6") || giorno.equals("13") || giorno.equals("20") ||
			giorno.equals("27"))
			di = this.giorno[5][colonnaMese];
		
		else
		
		if (giorno.equals("7") || giorno.equals("14") || giorno.equals("21") ||
			giorno.equals("28"))
			di = this.giorno[6][colonnaMese];
		
		return di;
	}
	
	
	
	// Sezione privata
	
	// Inizializzo la matrice del secolo
	private void setupSecolo() throws IOException
	{
		int i = 0, j = 0;
		String line;
		while ((line = fileSecolo.readLine()) != null)
			{
				StringTokenizer token = new StringTokenizer(line," ");
				while (token.hasMoreTokens())
					{
						secolo[i][j++] = token.nextToken();
					}			
				i++;
				j = 0;					
			}
	}
	
	// Inizializzo la matrice dell'anno
	private void setupAnno() throws IOException
	{
		int i = 0, j = 0;
		String line;
		while ((line = fileAnno.readLine()) != null)
			{
				StringTokenizer token = new StringTokenizer(line," ");
				while (token.hasMoreTokens())
					{
						anno[i][j++] = token.nextToken();
					}			
				i++;
				j = 0;					
			}
	}
	
	// Inizializzo la matrice del mese
	private void setupMese() throws IOException
	{
		int i = 0, j = 0;
		String line;
		while ((line = fileMese.readLine()) != null)
			{
				StringTokenizer token = new StringTokenizer(line," ");
				while (token.hasMoreTokens())
					{
						mese[i][j++] = token.nextToken();
					}			
				i++;
				j = 0;					
			}
	}
	
	// Inizializzo la matrice del giorno
	private void setupGiorno() throws IOException
	{
		int i = 0, j = 0;
		String line;
		while ((line = fileGiorno.readLine()) != null)
			{
				StringTokenizer token = new StringTokenizer(line," ");
				while (token.hasMoreTokens())
					{
						giorno[i][j++] = token.nextToken();
					}			
				i++;
				j = 0;					
			}
	}		
	
	
	private BufferedReader fileSecolo;
	private BufferedReader fileAnno;
	private BufferedReader fileMese;
	private BufferedReader fileGiorno;	
	
	private String[][] secolo;
	private String[][] anno;
	private String[][] mese;
	private String[][] giorno;
	
	
	
	// main
	public static void main(String args[]) throws IOException
	{
		Gregoriano cal = new Gregoriano();
		if (args.length != 3) {
			System.err.println("USO: java Gregoriano GIORNO MESE ANNO");
			System.err.println("Esempio: java Gregoriano 15 aprile 1996");
			System.exit(1);
		}
		System.out.println(cal.calcola(args[0],args[1],args[2]));
	}
}