Pełna def. klasy

0

Czesc,

Mam za zadanie napisanie nizej wymienionej klasy. Zeby bylo smieszniej, gosc praktycznie nic nie wytlumaczyl, mowiac ze z pewnoscia kiedys wszyscy juz programowali w C++... Na razie w ksiazce jestem na petlach, czyli o rozw ponizszego problemu moge sobie tylko pomarzyc...

Zdefiniuj klasę Data. Klasa powinna przechowywać w formacie dzień, miesiąc, rok i zawierać konstruktor i podstawowe metody odczytujące poszczególne składowe daty i umożliwiające zmianę daty. Należy również zdefiniować dodatkowe metody określające ( Uwaga data oznacza datę zapisaną w polach obiektu wywołującego, natomiast data1 jest przekazywana jako parametr metody - jako obiekt lub osobne wartości dzień, miesiąc , rok) :

  • czy data jest wcześniejsza od data1
  • czy rok daty jest rokiem przestępnym
  • ile dni jest w miesiącu wskazywanym przez data
  • czy data jest poprawna
  • zmień data na dzień późniejszą ( wcześniejszą)
  • zmień data na późniejszą ( wcześniejszą) o miesiąc
  • zmień data na późniejszą ( wcześniejszą) o rok
  • oblicz różnicę między data a data1 przy założeniu, że data >= data1

Jest tego b. duzo mimo wszystko prosze o pomoc.

0

chłopie siadaj do książki szybko ci pójdzie nie wiem z czego się uczysz javy ale jak znasz pętle i takie tam to poczytaj od razu o klasach
klasa to taki zbiór elementów(bardzo w skrócie to wyjaśniłem) :) np.

class jakastam
{
int zmienna;//tych zmiennych może być kupa
public int test(){
//to po prostu funkcja
}
}
//a odwołuje się do tych elementów w taki sposób tworząc nowy obiekt np.
jakastam a = new jakastam();
a.test();

poczytaj o tym

0

Probuje cos tworzyc ale konstruktory i te wszystkie rzeczy o ktorych mowa w cwiczeniu, sa jak dla na razie dla mnie czeskim filmem. Miec choc algorytm tego co mam zrobic byloby mi prosciej to pojac.

Dalej prosze o pomoc i przepraszam

0

:

class Data {
	public final static int MAX_ROK = 99999;
	public final static int ROK_PRZESTEPNY = 365;
	public final static int ROK_NIE_PRZESTEPNY = 366;
	public final static int MIESIAC_MAX = 12;
	public final static int LUTY_PRZESTEPNY = 28;
	public final static int LUTY_NIE_PRZESTEPNY = 29;
	public final static int MIESIAC_1 = 31;
	public final static int MIESIAC_2 = 30;
	
	//wybor kolejnosci prezentacji
	public final static int ROK_MIESIAC_DZIEN = 0;
	public final static int DZIEN_MIESIAC_ROK = 1;
	
	private int rok = -1;
	private int miesiac = -1;
	private int dzien = -1;
	
	public Data(int rok, int miesiac, int dzien) throws Exception {
		sprawdzRok(rok);
		this.rok = rok;
		sprawdzMiesiac(miesiac);
		this.miesiac = miesiac;
		sprawdzDzien(dzien);
		this.dzien=dzien;
	}
	public void ustawDate(int rok, int miesiac, int dzien) throws Exception {
		sprawdzRok(rok);
		this.rok = rok;
		sprawdzMiesiac(miesiac);
		this.miesiac = miesiac;
		sprawdzDzien(dzien);
		this.dzien=dzien;
	}
	/*
	 *
	 */
	public boolean czyPrzestepny() {
		 if((rok % 4 == 0 && rok % 100 != 0) || rok % 400 == 0)
		 	return true;
		 return false;
	}
	public int pobierzRok() {
		return rok;
	}
	public int pobierzMiesiac() {
		return miesiac;
	}
	public int pobierzDzien() {
		return dzien;
	}
	public String pokazDate(int prezentacja, char pomiedzy) {
		String data = null;
		switch(prezentacja) {
			case 0: data = new String(""+rok+pomiedzy+miesiac+pomiedzy+dzien);
			break;
			default: data = new String(""+dzien+pomiedzy+miesiac+pomiedzy+rok);
			break;
		}
		return data;
	}
	public double pobierzWartosc() {
	 	double val = rok;
	 	double m_d = miesiac;
	 	double d_d = dzien;
		val+= (m_d-1) / 12;
		double max_dzien = MIESIAC_1;
		if(miesiac % 2 == 0) max_dzien = MIESIAC_2;
		if(miesiac == 2) {
			max_dzien = LUTY_NIE_PRZESTEPNY;
			if(czyPrzestepny())
				max_dzien = LUTY_PRZESTEPNY;
		}
		double x = 1;
		val+=(d_d*(x/MIESIAC_MAX) ) / max_dzien;
		return val;
	}
	/* zwraca prawde jesli data podana na wejsciu
	 * jest wieksza */
	public boolean czyWieksza(Data dat) {
		if(dat.pobierzWartosc() > this.pobierzWartosc())
			return true;
		return false;
	}
	
	
	private void sprawdzRok(int rok) throws Exception {
		if(rok<=0 || rok>99999) throw new Exception("Błąd! Rok nie moze wynosić: "+rok);
	}
	private void sprawdzMiesiac(int miesiac) throws Exception  {
		if(miesiac<=0 || miesiac>MIESIAC_MAX) throw new Exception("Błąd! Miesiąc nie moze wynosić: "+miesiac); //numerowanie od 1
	}
	private void sprawdzDzien(int dzien) throws Exception  {
		if(dzien<=0 || dzien>MIESIAC_1) throw new Exception("Błąd! Dzień nie moze wynosić: "+dzien); //numerowanie od 1
		if(miesiac == -1) throw new Exception("Błąd! Nie można zweryfikować poprawności dnia, bez znanego miesiąca");
		if(rok == -1) throw new Exception("Błąd! Nie można zweryfikować poprawności dnia, bez znanego roku");
		if(miesiac == 2) { //luty
			if(czyPrzestepny() && dzien >LUTY_PRZESTEPNY) throw new Exception("Błąd! Wartość dnia, w miesiącu lutym dla roku przestepnego musi być <=28");
			else if(dzien > LUTY_NIE_PRZESTEPNY) throw new Exception("Błąd! Wartość dnia, w miesiącu lutym dla roku nie przestepnego musi być <=29");
		} else {
			if(miesiac % 2 ==0) {
				if(dzien > MIESIAC_2 ) throw new Exception("Błąd! Wartość dnia, w miesiącu "+miesiac+" musi być <="+MIESIAC_2 );
			 } else {
			 	if(dzien > MIESIAC_1) throw new Exception("Błąd! Wartość dnia, w miesiącu "+miesiac+" musi być <="+MIESIAC_1);
			 }
		}
	}
	
}
public class Main {
	private Data dat1;
	private Data dat2;
	
	public Main() throws Exception {
		dat1 = new Data(2000,10,5);
		dat2 = new Data(2000,10,4);
		
		System.out.println("Data1 = "+dat1.pokazDate(Data.DZIEN_MIESIAC_ROK, '.'));
		System.out.println("Data2 = "+dat2.pokazDate(Data.ROK_MIESIAC_DZIEN, '-'));
		
		System.out.println("Czy Data2 jest wieksze niz Data1: "+dat1.czyWieksza(dat2));
		
		System.out.println("Wartosc daty1 = "+dat1.pobierzWartosc());
		System.out.println("Wartosc daty2 = "+dat2.pobierzWartosc());
		
		dat1.ustawDate(2007,2,31); //wywola exception
		
	}
	public static void main(String[] args) {
		try {
			new Main();
		}catch(Exception e) {
			System.out.println("Wystapil wyjatek:\n"+e.getMessage());
			System.exit(-1);
		}
	}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1