Obiekt zmienia drugi obiekt

0

Witajcie,

Chciałbym stworzyć interakcje między obiektami. Jeśli dodam obiekt zamówienie o2, chciałbym żeby zmieniło to książkę x2 na niedostępną. Help.

public class TestObject {
	public static void main(String args[]) {

	Book x1 = new Book("Hodowla owiec", 1, true);
	Book x2 = new Book("Hodowla burakow", 2, true);
		
	Orders o1 = new Orders(1, 1);
	
	}
}


 class Book {
	 String title;
	 int id;
	 boolean available;
	 
	public Book(String title, int id, boolean available){
		this.title = title;
		this.id = id;
		this.available = available;
	}
	String getTitle(){
		return title;
	}
	int getId(){
		return id;
	}
	boolean isAvailable(){
		return available;
	}
}

 class Orders {
	 int orderid;


	 int bookid;
	
	 public Orders(int orderid, int bookid){
		 this.orderid = orderid;
		 this.bookid = bookid;
	 }
 }
0

Nie znam javy, wiec zakladam ze settery sa domyślnie... i nie bardzo rozumiem dlaczego masz problem :) Ale ogolnie to napisz sobie po utworzeniu nowego obiektu
Orders o2 = new Orders( 2, 2);
po prostu
x2.isAvailable = false.
Bo obiekt książka dwa stworzyłeś na samym poczatku, więc teraz na podstawie jakiejś logiki/warunków nimi zarządzaj. "Interakcja obiektów" to w tym wypadku trochę za dużo powiedziane.

0

Heh, no to powinieneś mieć referencję do obiektu Book w klasie Order.
I albo trzymać te książki w globalnej liście którą przeszukujesz podczas podania bookId do Order, albo podawać do konstruktora już wybraną książkę.

0

Troszkę słabo to ogarniasz, po co ręcznie w konstruktorze Orders przekazujesz ID książki? Przekaż tam obiekt książki - wyciągniesz z niego ID książki, a następnie zmienisz stan zmianiając wartość available.

Następnie - po co tworzysz ręcznie ID książek, zamówień? Nie chciałbyś aby to było automatycznie generowane? Może mnie wyjadacze Javy zjedzą, ale juz nawet jakiś timestamp byłby lepszy, nie mówiąc już o ID generowanym przez bazę.

Następnie - czy tworząc obiekt książka jest szansa że utworzysz go i książka od razu będzie niedostępna?

Czy przy obecnej ilości danych i tym, że chyba dopiero zaczynasz programować - nie lepiej byłoby użyć tablicy do przechowywania tytułów książek, i na podstawie tej tablicy wygenerować obiekty?

Atrybuty klas masz publiczne - użyj lepiej jakiejś enkapsulacji.

0

Dokładniej ujmując zmierzam do tego żeby utworzyć input Scanner.
I żeby dodawać przez Scanner zamówienia. I żeby to zmieniało mi książki.

0
  1. Napisz klasę gdzie będziesz trzymał wszystkie książki, w tej klasie udostępnij metodę findBook, która po id, lub tytule, lub po czym tam chcesz znajdzie książkę.
  2. Następnie w klasie Book udostępnij metodę zmieniającą dostępność książki.
  3. Do konstruktora w klasie Order przekazuj znalezioną książkę (z pkt. 1) oraz wywołuj metodę zmieniającą dostępność (z pkt. 2)
0
Haskell napisał(a):
  1. Napisz klasę gdzie będziesz trzymał wszystkie książki, w tej klasie udostępnij metodę findBook, która po id, lub tytule, lub po czym tam chcesz znajdzie książkę.
  2. Następnie w klasie Book udostępnij metodę zmieniającą dostępność książki.
  3. Do konstruktora w klasie Order przekazuj znalezioną książkę (z pkt. 1) oraz wywołuj metodę zmieniającą dostępność (z pkt. 2)
  1. Czy wszystkie książki powinieniem trzymać w arraylist?
0
Biały Terrorysta napisał(a):
  1. Czy wszystkie książki powinieniem trzymać w arraylist?

Trzymaj tak jak Ci wygodnie. Mapa wydaje się spoko, np. HashMap. ArrayList też może być choć wtedy będziesz musiał iterować po niej w celu znalezienia elementu, chyba że ID książki to będzie jednocześnie indeks na liście.

0

Spojrzałem raz jeszcze w ten kod. Order może przechowywać tylko jedną książkę - to wymaga dopracowania.

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