PDA

Visualizza la versione completa : Spiegazione programma


alkatraz86
11-09-2003, 23:28
aiuto :dh: :confused: :bh: :cry:
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
/////////////////////////////////////////////////////////////////////

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);
}
//////////
nn so fare la spiegazione aiuto :dh: :dh: :dh:
System.out.println(cal.calcola(args[0],args[1],args[2]));
}
}

Johnny_Depp
12-09-2003, 14:06
aprire discussioni identiche va contro le regole vigenti in questo forum (alias Crossposting)
http://forum.html.it/forum/showthread.php?s=&threadid=515768

quindi questa la chiudo.

Loading