Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

januszcjk123

Problem z zadaniem - java

Rekomendowane odpowiedzi

Ja bym zrobił tak (zakładając pewne uproszczenia, bo wygląda to na jakiś projekt zaliczeniowy):

 

Enum Region

Enum SatusPrzesylki

Klasa Adres(ulica, kodPocztowy)

Klasa Przesylka(status, adres)

Klasa Kurier(imie, nazwisko)

Klasa Sortownia

 

Sortownia może mieć dwie mapy: kurier -> region i adres -> region (np po kodzie pocztowym). Możesz trzymać listę przesyłek w sortowni i przy dodawaniu nowej aktualizować mapowania. W Javie 8+ łatwiutko wyszukasz paczki spełniające wszelkie kryteria przy pomocy streamów. Nie wiadomo, jak ustawiać status paczek, więc dałbym randoma.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zrobiłem 2 mapy tak jak poleciłeś. Kurier teraz jest przypisany do danego regionu, a region jest przypisany na podstawie adresu(kodu pocztowego) z klasy Adres. W sortowni mam listę paczek(pusta bez zadnego statusu, moze nadac z gory Status "Zarejestrowano paczke"?). Nie rozumiem, nie wiem jak teraz te paczki mam przypisać do danego regionu (zeby w jakis sposob je polaczyc z kurierem )i jak zrobic zeby po nadaniu regionu zmienialy status. Strasznie się już w tym pogubiłem, chyba wybrałem za trudne zadanie jak na początki początków. Wkleje tutaj mój kod.

 

ENUM REGION

package com.company;

public enum Region {
   PODLASKIE(111),
   MAZOWIECKIE(112),
   POMORSKIE(113),
   WIELKOPOLSKIE(114),
   MAŁOPOLSKIE(115);

   int numer;

   Region(int numer) {
       this.numer = numer;
   }


}

 

ENUM STATUS PRZEYSLKI

 


public enum StatusPrzesyłki {
   ZAREJESTROWANO_PACZKE,
   NADANO_DO_DOSTARCZENIA,
   DOSTARCZONO;
}


 

KLASA ADRES

 

public class Adres {
   String ulica;
   String kodPocztowy;

   public Adres(String ulica, String kodPocztowy) {
       this.ulica = ulica;
       this.kodPocztowy = kodPocztowy;
   }

   @Override
   public String toString() {
       return "Adres{" +
               "ulica='" + ulica + '\'' +
               ", kodPocztowy='" + kodPocztowy + '\'' +
               '}';
   }
}

 

KLASA PRZESYŁKA - nadałem z góry status Zarejestrowano paczke ale raczej to nie ma sensu, jakos wypadaloby skorzystac z enuma status przeyslki?

 


public class Przesyłka {
   String status = "ZAREJESTROWANO PACZKE";

   @Override
   public String toString() {
       return "Przesyłka{" +
               "status='" + status + '\'' +
               '}';
   }
}

 

KlASA KURIER

public class Kurier {
   String imie;
   String nazwisko;

   public Kurier(String imie, String nazwisko) {
       this.imie = imie;
       this.nazwisko = nazwisko;
   }


   @Override
   public String toString() {
       return "Kurier{" +
               "imie='" + imie + '\'' +
               ", nazwisko='" + nazwisko + '\'' +
               '}';
   }
}

 

I NAJWAZNIEJSZA KLASA SORTOWNIA

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Sortownia {

   List<Przesyłka>lista = new ArrayList<>();



   public void DodajPrzesylke(Przesyłka przesyłka){
       this.lista.add(przesyłka);
   }

   public void WyswietlListePrzesylek(){
       for(Przesyłka przesyłka:lista)
           System.out.println(przesyłka.toString());
   }



   public static void main(String[] args) {

       Przesyłka przesyłka = new Przesyłka();
       Przesyłka przesyłka1 = new Przesyłka();
       Przesyłka przesyłka2 = new Przesyłka();
       Przesyłka przesyłka3 = new Przesyłka();
       Przesyłka przesyłka4 = new Przesyłka();
       Sortownia sortownia = new Sortownia();
       sortownia.DodajPrzesylke(przesyłka);
       sortownia.DodajPrzesylke(przesyłka1);
       sortownia.DodajPrzesylke(przesyłka2);
       sortownia.DodajPrzesylke(przesyłka3);
       sortownia.DodajPrzesylke(przesyłka4);
       System.out.println("Lista wszystkich paczek na sortowni:");
       sortownia.WyswietlListePrzesylek();





       Kurier kurier = new Kurier("Greg", "Dawson");
       Kurier kurier1 = new Kurier("Penelope", "Cruz");
       Kurier kurier2 = new Kurier("Dale", "Barbara");
       Kurier kurier3 = new Kurier("Thomas", "Shelby");
       Kurier kurier4 = new Kurier("Brad", "Rooney");

       Adres adres = new Adres("Podleśna 12", "98-220");
       Adres adres1 = new Adres("Laskowa 32", "98-112");
       Adres adres2 = new Adres("Bochenkowa 48", "94-121");
       Adres adres3 = new Adres("Torfowa 11", "76-112");
       Adres adres4 = new Adres("Bazaliowa 34", "94-134");

       Map<Adres,Region>map1 = new HashMap<>();
       map1.put(adres, Region.POMORSKIE);
       map1.put(adres1, Region.MAŁOPOLSKIE);
       map1.put(adres2, Region.MAZOWIECKIE);
       map1.put(adres3, Region.PODLASKIE);
       map1.put(adres4, Region.WIELKOPOLSKIE);
       System.out.println("----------------------------------------------------------------------------------");
       System.out.println("Na podstawie adresu przypisujemy region");
       System.out.println(map1.toString());
       System.out.println("----------------------------------------------------------------------------------");
       System.out.println("Przypisujemy kuriera do danego regionu");
       Map<Kurier, Region> map = new HashMap<>();
       map.put(kurier, Region.PODLASKIE);
       map.put(kurier1, Region.MAZOWIECKIE);
       map.put(kurier2, Region.MAŁOPOLSKIE);
       map.put(kurier3, Region.POMORSKIE);
       map.put(kurier4, Region.WIELKOPOLSKIE);

      System.out.println(map.toString());


   }
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Adres na Region można sobie zmapować w dowolny wyimaginowany sposób. Na przykład [0X-XXX -> regionA; 1X-XXX -> regionB, 2X-XXX -> regionC; ...]. To nie jest tak, że musisz się sztywno trzymać tego, co napisałem. Jak z mapą jest coś nie tak, to stwórz sobie metodę pomocniczą. W trakcie pisania kodu na pewno zobaczysz, że coś jest wygodniej zrobić inaczej, niż na początku zakłdałeś.

 

Trzymaj się dobrych zasad:

  • Dziel kod na metody zamiast go kopiować
  • Nazywaj zmienne sensownie.
  • Nie używaj polskich znaków w nazwach zmiennych/klas/itp
  • Klasa ma robić tylko to, co do niej należy i nic więcej. main() na pewno powinien wylecieć z sortowni.

 

Wtedy dojdziesz do czegoś takiego:

 

public enum Region {
   REGION_A("0X-XXX"),
   REGION_B("1X-XXX"),
   REGION_C("2X-XXX");
   // ...

   String szablonKodu;

   Region(String szablonKodu) {
       this.szablonKodu = szablonKodu;
   }

   boolean czyZawiera(Adres adres) {
       String pierwszyZnakSzablonuKoduPocztowego = szablonKodu.substring(0, 1);
       return adres.getKodPocztowy().startsWith(pierwszyZnakSzablonuKoduPocztowego);
   }
}

public class Adres {
   private String ulica;
   private String kodPocztowy;

   public Adres(String ulica, String kodPocztowy) {
       this.ulica = ulica;
       this.kodPocztowy = kodPocztowy;
   }

   public String getUlica() {
       return ulica;
   }

   public String getKodPocztowy() {
       return kodPocztowy;
   }

   @Override
   public String toString() {
       return "Adres{" +
               "ulica='" + ulica + '\'' +
               ", kodPocztowy='" + kodPocztowy + '\'' +
               '}';
   }
}

public class Przesylka {
   private Adres adresDostawy;

   public Przesylka(Adres adresDostawy) {
       this.adresDostawy = adresDostawy;
   }

   public Adres getAdresDostawy() {
       return adresDostawy;
   }

   @Override
   public String toString() {
       return "Przesylka{" +
               "adresDostawy=" + adresDostawy +
               '}';
   }
}

public class Sortownia {

   private List<Przesylka> przesylki = new ArrayList<>();
   private Map<Region, List<Kurier>> kurierzy = new HashMap<>();

   public void dodajPrzesylke(Przesylka Przesylka) {
       przesylki.add(Przesylka);
   }

   public void zatrudnijKuriera(Kurier kurier, Region region) {
       List<Kurier> dostepniKurierzy = kurierzy.get(region);
       if (dostepniKurierzy == null) {
           dostepniKurierzy = new ArrayList<>();

       }
       dostepniKurierzy.add(kurier);
       kurierzy.put(region, dostepniKurierzy);
   }

   public void wyswietlListePrzesylek() {
       for (Przesylka przesylka : przesylki) {
           Adres adresDostawy = przesylka.getAdresDostawy();
           Region regionDostawy = znajdzRegion(adresDostawy);
           List<Kurier> dostepniKurierzy = kurierzy.get(regionDostawy);
           System.out.println(przesylka + " może być dostarczona przez następujących kurierów: " + dostepniKurierzy);
       }
   }

   private Region znajdzRegion(Adres adres) {
       for (Region region : Region.values()) {
           if (region.czyZawiera(adres)) {
               return region;
           }
       }
       return null;
   }
}

public class Main {
   public static void main(String[] args) {
       Sortownia sortownia = new Sortownia();

       sortownia.dodajPrzesylke(new Przesylka(new Adres("Fiołkowa 8", "00-123")));
       sortownia.dodajPrzesylke(new Przesylka(new Adres("Kwiatowa 10", "11-123")));
       sortownia.dodajPrzesylke(new Przesylka(new Adres("Szybka 3/4a", "11-789")));
       sortownia.dodajPrzesylke(new Przesylka(new Adres("Lotnicza 1", "22-222")));

       sortownia.zatrudnijKuriera(new Kurier("Jan", "Kowalski"), Region.REGION_A);
       sortownia.zatrudnijKuriera(new Kurier("Jan", "Nowak"), Region.REGION_A);
       sortownia.zatrudnijKuriera(new Kurier("Adam", "Kot"), Region.REGION_B);
       sortownia.zatrudnijKuriera(new Kurier("Adam", "Ikśiński"), Region.REGION_C);

       sortownia.wyswietlListePrzesylek();
   }
}

Otrzymasz to w efekcie:

Przesylka{adresDostawy=Adres{ulica='Fiołkowa 8', kodPocztowy='00-123'}} może być dostarczona przez następujących kurierów: [Kurier{imie='Jan', nazwisko='Kowalski'}, Kurier{imie='Jan', nazwisko='Nowak'}]
Przesylka{adresDostawy=Adres{ulica='Kwiatowa 10', kodPocztowy='11-123'}} może być dostarczona przez następujących kurierów: [Kurier{imie='Adam', nazwisko='Kot'}]
Przesylka{adresDostawy=Adres{ulica='Szybka 3/4a', kodPocztowy='11-789'}} może być dostarczona przez następujących kurierów: [Kurier{imie='Adam', nazwisko='Kot'}]
Przesylka{adresDostawy=Adres{ulica='Lotnicza 1', kodPocztowy='22-222'}} może być dostarczona przez następujących kurierów: [Kurier{imie='Adam', nazwisko='Ikśiński'}]

 

Ten kod też nie jest najlepszy, bo zapisywanie szablonów kodów pocztowych przez XX-XXX to mega bieda i powinno się użyć do tego regexa i String.match, ale nie chciałem pchać niepotrzebnych nowości. Metody znajdzRegion i czyZawiera(Adres) też mogłaby trafić do osobnej klasy potrafiącej łączyć Adres z Regionem.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...