zadani2,reprezentacja instacji

0

Czy możecie mi powiedzieć czy w dobrym kierunku idę, czytając treść zadania momentalnie nie wiem co czytam.
nowa referencja tzn. obiekt przypisać nowej metodzie, nie konstruktorowi prawda?
cz. 2) nie rozumiem o co tu chodzi.

Zbuduj klasę Czas reprezentującą instancje o dostępie do atrybutów typu całkowitego
w postaci: godziny, minut i sekund. Ich inicjalizacja może odbywać się pojedynczo lub
składowo w konstruktorach przeciążonych klasy, przy zachowaniu niezmienności tych pól,
niezależnie od wykonywanej później operacji. Operacje te z kolei powinny stanowić zbiór
metod umożliwiających:

a) zwrot informacji o pełnym wymiarze czasu ( w postaci: godzina – minuty –
sekundy) na rzecz konkretnej instancji
b) zwrot informacji o wybranym formacie czasu na rzecz konkretnej instancji
(hh:mm, hhss)
c) dodawanie do aktualnie zainicjalizowanego czasu dowolnej ilości godzin, przy
zachowaniu 24 – godzinnego trybu dobowego, wskazując w ten sposób na nową
referencję
d) dodawanie do aktualnie zainicjalizowanego czasu dowolnej ilości minut, przy
zachowaniu 24 – godzinnego trybu dobowego, wskazując w ten sposób na nową
referencję
e) dodawanie do aktualnie zainicjalizowanego czasu dowolnej ilości sekund, przy
zachowaniu 24 – godzinnego trybu dobowego, wskazując w ten sposób na nową
referencję
f) obliczenie ile godzin, minut i sekund zostało jeszcze do końca dnia
g) obliczenie ile godzin, minut i sekund upłynęło już od początku dnia
Następnie utwórz klasę testującą, tak aby można było pokazać:

  1. Przykładowe działanie wszystkich operacji,
  2. Niezmienność atrybutów i instancji biorących udział w poszczególnych operacjach,
    przy czym wartości inicjalizujące nowe instancje przekaż jako parametry klasy
    testującej.
    co zrobiłem:
 
//lab1.2
public class Czas {
	int godz;
	int min;
	int sec;
	

	public Czas(int godz, int min, int sec) {
		// TODO Auto-generated constructor stub
		this.godz=godz;
		this.min=min;
		this.sec=sec;
		
	}
	
	
	private void druk() {
		// TODO Auto-generated method stub
		System.out.println(godz+":"+min+":"+sec);
	}
		private void druk_2() {
			// TODO Auto-generated method stub
			System.out.println(+godz+ ":"+min);
		}
	
	public Czas dodaj_godz(int ile) {
		// TODO Auto-generated method stub
		Czas nowaGodzina=new Czas( godz, min, sec);
		
			for (int i = 0; i < ile; i++) {
				nowaGodzina.dodajeGodz();
				
				
		
		
	}
			return nowaGodzina;
	
		
	}
	private void dodajeGodz() {
		// TODO Auto-generated method stub
		
		if(godz>24)
			godz=1;
		godz++;
		
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Czas ustaw=new Czas(21,30,35);
		Czas dodawanie_godz=ustaw.dodaj_godz(5);
		ustaw.druk();
		ustaw.druk_2();
		dodawanie_godz.druk();
		
		
	}
		
	}
0

Masz może zajęcia z Ratajem? Miałem identyczne zadania na pierwszym roku studiów:)
A tak poważnie...
Napisz kilka konstruktorów, np. Czas (int godzina), Czas (int godzina, int minuta), Czas (int godzina,int minuta, int sekunda), a jak Ci się chce, to Czas (String czas) <-ten ostatni wymaga cięcia Stringów.
Pola godzina,minuta i sekunda powinny być ustawiane na 0, jeśli dany konstruktor nie przyjmuje tego w swoich parametrach. Możesz też zrobić konstruktor Czas(), który zapamięta aktualną datę (poczytaj, co ciekawego możesz znaleźć w Calendar).
Pola godzina,minuta i sekunda mogą mieć modyfikator final, ponieważ raz ustawione mają być później niezmienne. Oznacza to, że jak stworzysz obiekt reprezentujący godzinę: 11-22-33 (hh-mm-ss), to później żadna metoda nie może zmienić tych wartości. Idąc dalej, metody dodające/odejmujące czas muszą do czasu zapisanego w obiekcie dodawać/odejmować konkretną wartość (jak miesiące w tym poprzednim zadaniu - sprawdzanie, czy minuta nie przekracza 59 i czy godzina nie przekracza 23), a wynik musi przekazywać w nowym obiekcie.
Mówiąc inaczej: jeśli masz godzinę 11-22-33 zapisaną w obiekcie czas1 klasy Czas, a następnie wykonasz na nim Czas czas2 = czas1.dodajGodziny(2), to funkcja dodajGodziny(int ile), musi:
dla godziny zapisanej w obiekcie, dla którego została wywołana dodać w pętli "ile" razy po jednej godzinie (zrób sobie dodatkową funkcję dodajGodzine()), a na końcu utworzyć nowy obiekt klasy Czas z nową godziną (w tym przypadku 13-22-33) i go zwrócić. Po tej operacji w obiekcie czas1 ciągle będzie 11-22-33, a w czas2, będzie 13-22-33.

0

To moje wypociny nie miałem pomysłu jak zrobić żeby hh mm ss były powiązane czy zależne, ze sobą, podobnie z obliczanie do końca dnia.

//lab1.2
public class Czas {
	int godz=0;
	int min=0;
	int sec=0;
	

	public Czas(int godz, int min, int sec) {
		// TODO Auto-generated constructor stub
		this.godz=godz;
		this.min=min;
		this.sec=sec;
		
		
	}
	public Czas(int godz, int min){
		this.godz=godz;
		this.min=min;
	}
	public Czas(int godz){
		this.godz=godz;
	}
	
	private void druk() {
		// TODO Auto-generated method stub
		System.out.println(godz+":"+min+":"+sec);
	}
		private void druk_2() {
			// TODO Auto-generated method stub
			System.out.println(+godz+ ":"+min);
		}
	
	public Czas dodaj_godz(int ile) {
		// TODO Auto-generated method stub
		Czas nowaGodzina=new Czas( godz, min, sec);
		
			for (int i = 0; i < ile; i++) {
				nowaGodzina.dodajeGodz();
				
				
				
		
		
	}
			return nowaGodzina;
			
	
		
	}
	public Czas dodaj_min(int ile) {
		// TODO Auto-generated method stub
		Czas nowaMin=new Czas( godz, min, sec);
		
			for (int i = 0; i < ile; i++) {
				nowaMin.dodajeMin();
				
				
				
		
		
	}
			return nowaMin;
	}
	public Czas dodaj_sec(int ile) {
		// TODO Auto-generated method stub
		Czas nowaSec=new Czas( godz, min, sec);
		
			for (int i = 0; i < ile; i++) {
				
				nowaSec.dodajeSec();
				
				
		
		
	}
			return nowaSec;
	
		
	}
	private void dodajeSec() {
		// TODO Auto-generated method stub
		if(sec>=60)
		sec=0;
	sec++;
		
	}
	private void dodajeGodz() {
		// TODO Auto-generated method stub
		
		if(godz>24)
			godz=1;
		godz++;
		
		
	}
	private void dodajeMin(){
		if(min>=59)
			min=0;
			min++;	
				
				}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Czas czas1=new Czas(21,30,35);
	
		 Czas czas2 = czas1.dodaj_godz(1);
		 Czas czas3 = czas2.dodaj_min(30);
		 Czas czas4= czas2.dodaj_sec(15);
		 System.out.println("Ile do konca dnia"+(dzien))
		czas1.druk();
		czas1.druk_2();
		czas2.druk();
		czas2.druk_2();
		czas3.druk();
		czas4.druk();
		
		
	
		
		
		
	}
	
		
		
	}


	
	

	
		
	


0

Namieszałeś, kolego:)
Najważniejsze - obiekty klasy muszą być niezmienne niezależnie od wykonywanych metod, czyli nie możesz sobie zrobić metody dodaj_godz(), która zmieni wartość pola godz. Zamiast tego dla obiektu czas_1 klasy Czas, który ma zapisaną godzinę 1133, musisz wywołać nowy konstruktor nowego obiektu, który będzie już w momencie tworzenia miał ustawioną godzinę 1233.
Zrób tak:

public class Czas{
    final int godz;
    final int min;
    final int sec;

    public Czas(int godz, int min, int sec){
        this.godz=godz;
        this.min=min;
        this.sec=sec;
    }

    public Czas(int godz, int min){
        this.godz=godz;
        this.min=min;
        this.sec=0; //musisz nadać jakąś wartość polu z modyfikatorem final!
    }

    public Czas(int godz){
        //wiesz, co masz zrobić
    }
}

Drukowanie wystarczy Ci w wersji drukującej wszystkie 3 elementy
Co do dodawania/odejmowania, to:
Po pierwsze - pamiętaj o odejmowaniu: jeśli parametr jest ujemny, to odejmujesz czas, zamiast go dodawać
Po drugie - skoro pola mają być niezmienne (czyli final), to musisz jakoś inaczej wykombinować samo dodawanie.
Zrób to sobie tak:

private Czas dodaj_godz(int ile){
    Czas nowyCzas = null;
    if (ile>0){
        /*
         * Najpierw oblicz, która godzina będzie po przesunięciu,
         * a nastepnie za nowy czas podstaw:
         * nowyCzas=new Czas(nowaGodzina, nowaMinuta, nowaSekunda);
         */
    } else {
        //to też musisz obsłużyć!!
    }
    return nowyCzas;
}

Tak samo zrób z minutami i sekundami, tylko pamiętaj, że przekroczenie 60 zmienia też inne wartość, tj. jeśli do godziny 1133 dodasz 40 minut, to oprócz tego, że minuty zmienią się na 2 zamiast 62, to godzina przeskoczy z 11 na 12!

Poza tym, Twój kod robił np:

if (godz>24) //jakim cudem??
   godz=1;
   godz++;

Rezultat takiego cuda, to 2, a chyba nie o to chodziło. Miało być raczej

if (godz<24){
   godz++;
} else {
   godz=1;
}

To i tak na nic (nie ma lekko:P), bo nie możesz modyfikować godz (które jest final), a tylko jakąś nową godzinę, którą będziesz używał do stworzenia nowego obiektu, ale chciałem Ci tylko pokazać, jak się robi takie warunki. Pamiętaj, że w minutach i sekundach w "else" musi być modyfikacja wartości nadrzędnych (np. dla sekund - minut) i pamiętaj, że nie może to być głupie nowaMinuta++, bo możesz przez przypadek przejechać wartość 60.

Teraz ile godzin zostało lub upłynęło..
Do tego celu potrzebujesz operacji dodawania i odejmowania dwóch dat.
Potrzebujesz metod: Czas dodajCzas(Czas czas1, Czas czas2), oraz Czas odejmijCzas(Czas odjemna, Czas odjemnik).
Metody te muszą zwracać obiekt klasy Czas (czyli minuta, godzina i sekunda), którego wartości będą obliczone na podstawie: sekundy z pierwszego czasu + sekundy z drugiego (pamiętaj o tym, że to może przesunąć minuty!), minuty1 + minuty2 (może przesuwać godziny) no i dodawania godzin.
Oprócz tego musisz zrobić metody Czas czasDoKoncaDoby() i czasOdPoczatkuDoby(), które będą do aktualnej godziny dodawały/odejmowały godzinę 0000 lub 2400 (to już zależy, jak traktujesz północ - jako początek, czy koniec)

Ostatnia sprawa, to klasa testowa.
Napisz nowa klasę CzasTest, która będzie miała metodę, która będzie sprawdzała, czy klasa Czas jest poprawna.
Mam tu na myśli np. stworzenie obiektu czas1 z godziną 1133, dodanie do niej 40 minut i sprawdzenie (zwykłym if-em), czy rezultat, to obiekt klasy Czas o wartości 1233. Postaraj się uwzględnić w testach jak najwięcej przypadków. Poczytaj o testach jednostkowych, może o JUnit i asercjach, adnotacjach @Test i jak dzięki temu wszystkiemu zautomatyzować testy gotowego produktu.

Nudzi mi się w robocie, to piszę długie posty:P

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