Zadanie java

0

Witam
Głowię się nad zadaniem.
Mam napisać serwis SchoolService, którego zadaniem będzie dodawanie i usuwanie studentów do szkoły. Przy tworzenia obiektu typu SchoolService ma on przekazać w konstruktorze tylko jeden parametr – ilość miejsc w szkole;
SchoolService ma posiadać dwie metody publiczne: addStudent() oraz deleteLastAddedStudent();
Pierwsza z wymienionych metod dodaje konkretnego studenta na listę szkoły, druga natomiast służy tylko temu, żeby usunąć z listy najnowszego studenta.
Podczas dodawania lub usuwania studenta ma się wyświetlać w konsoli że dodałeś lub usunąłeś studenta (mają się wyświetlić również jego dane).
Kiedy lista zostanie zapełniona ma się wyświetlić komunikat, że lista jest już pełna i nie da się dodać nikogo nowego.
Kiedy będziesz próbował usunąć studenta z pustej listy ma się wyświetlić komunikat, że lista jest już pusta.
Na koniec przetestować wszystko w klasie SchoolRunner.

Stworzyłem obiekt typu SchoolService z konstruktorem, który przekazuje jeden parametr

public class SchoolService {



    private int numberOfPlacesInSchool;

    public SchoolService(int numberOfPlacesInSchool) {
        this.numberOfPlacesInSchool = numberOfPlacesInSchool;
    }

Chciałbym stowrzyć klase Student ale nie wiem czy dobrze kombinuję?
Mam problem z metodami w tym zadaniu.
Prosiłbym o nakierowanie mnie co do rozwiązania.
Jestem na etapie nauki więc proszę o wyrozumiałość.

0

Dzięki panowie za odzew.
Problem polega na tym czy stworzyć klasę Student? Osobiście myślę że tak, bo w zadaniu podane jest gdy dodam lub usunęstudenta (ma się wyświetlić również jego dane).
Kolejna sprawa to dwie metody które mają się znajdować w SchoolService, z którymi nie mogłem sobie poradzić.
Jestem na etapie tablic jednowymiarowych i te zadanie mam zrobić odnośnie tego tematu.

3

Czy mógłbyś wyjaśnić w czym problem, bo nie do końca rozumiem. Co jest niejasne? — TheLearner 31 minut temu

Zgadza się. Tu wszystko jest niejasne.

@starsky859 nie opisuj kodu, tylko daj kod. Choćby niepełny. To jest o wiele bardziej komunikatywne.
Nie ukrywam, że Twoja wiarygodność bez kodu jest ... dość niska "zróbcie to za mnie"

forum nie zastąpi wiedzy o języku.

3

Problem polega na tym czy stworzyć klasę Student? Osobiście myślę że tak, bo w zadaniu podane jest gdy dodam lub usunęstudenta (ma się wyświetlić również jego dane).

A jak inaczej chcesz kogoś dodać? Coś tam musisz przekazać. Nawet jakby ten student miał tylko imie, to stworzenie własnej klasy to i tak dobra praktyka. Bardzo ryzykownie jest żonglować w kodzie typami podstawowymi, bo nagle masz funkcje która przyjmuje jako argumenty 5 stringów i nie wiadomo co jest co :)

Kolejna sprawa to dwie metody które mają się znajdować w SchoolService, z którymi nie mogłem sobie poradzić. Jestem na etapie tablic jednowymiarowych i te zadanie mam zrobić odnośnie tego tematu.

A próbowałeś je w ogóle napisać? Bo ich logika jest raczej dość jasna i oczywista. Najprościej byłoby użyć tutaj jakiegoś Stack<T>, ale nikt nie broni ci zrobić sobie tego za pomocą tablicy. Musisz wtedy pamiętać ostatni "zajęty" index w twojej tablicy, żeby widzieć kogo usuwać (i potem oczywiście index--).

0

Stworzyłem klase Student z tym nie było żadnych problemów i dołożyłem metody addStudent() oraz deleteLastAddedStudent().
Mam natomiast problem z metoda addStudent, która powinna dodawać studenta do listy, myślę że powinna iść za tym logika związana z dodawaniem studenta do listy
Póki co metoda ta wygląda w ten sposób ale brakuje w niej dodawania studenta do listy
Mogłbym prosić o pomoc jak to zrobić?

public int addStudent(String firstName, String lastName, int age, int ID ) { 

if (getNumberOfPlacesInSchool() > 0) {       
  return getNumberOfPlacesInSchool() - 1;
} else {
    System.out.println("Lista jest pełna");
return -1;
0

Po 1. Dlaczego ta metoda zwraca int? Z tego co widzę, to nie próbujesz zwrócić ID tego studenta co jeszcze miałoby jakiś sens, tylko zrobić coś innego, co nie wygląda dobrze i jest w dodatku źle napisane. Wyjaśnij proszę co dokładnie myślisz, że się stanie gdy zrobisz return getNumberOfPlacesInSchool() - 1; i dlaczego to powinno być wynikiem operacjii addStudent()?

Po 2. W czym chcesz tych studentów przechowywać? W sensie, gdzie masz stworzoną jakąś kolekcję na obiekty typu Student?

edit#
co to tego getNumberOfPlacesInSchool() , najlepiej wrzuć też kod tej metody

0

ad2. Obiekt typu Student mam stworzony w klasie Student (jest imie, nazwisko, wiek). Metoda addStudent przyjmuje parametry
ad1. Tutaj mocno błądzę i nie mam na to rozwiązania

1

Nie chodzi o pojedynczy obiekt Student a o kolekcję (List, Map, Set) która trzyma wiele takich obiektów. To do niej powinieneś dodać nowego studenta.
Prościej by było jakbyś wysłał cały kod który napisałeś do tej pory.

0

tak wygląda cały kod klasy SchoolService.

public class SchoolService {

private int numberOfPlacesInSchool;

public SchoolService(int numberOfPlacesInSchool) {
    this.numberOfPlacesInSchool = numberOfPlacesInSchool;
}

public int getNumberOfPlacesInSchool() {
    return numberOfPlacesInSchool;
}

public void setNumberOfPlacesInSchool(int numberOfPlacesInSchool) {
    this.numberOfPlacesInSchool = numberOfPlacesInSchool;
}

public int deleteLastAddedStudent() {
    return getNumberOfPlacesInSchool() + 1;
}

public int addStudent(String firstName, String lastName, int age, int ID ) {
    if (getNumberOfPlacesInSchool() > 0) {
        return getNumberOfPlacesInSchool() - 1;
    } else {
        System.out.println("Lista jest pełna");
        return -1;
    }
}

sam nie potrafię zlokalizować błedu który popełniam,

2

Ok, to nie zadziała.

public void setNumberOfPlacesInSchool(int numberOfPlacesInSchool) {
	this.numberOfPlacesInSchool = numberOfPlacesInSchool;
}

Po co Ci to, skoro ustawiasz te wartość w konstruktorze?

public int deleteLastAddedStudent() {
    return getNumberOfPlacesInSchool() + 1;
}

Jeżeli stworzysz swój serwis z wartością numberOfPlacesInSchool powiedzmy 10 i wywołasz metodę deleteLastAddedStudent() to otrzymasz wynik 11.
Widzisz w tym jakikolwiek sens?

if (getNumberOfPlacesInSchool() > 0) {
	return getNumberOfPlacesInSchool() - 1;

To nie działa w ten sposób, po 1 sprawdzasz złą rzecz w if (ale o tym później), po drugie, robiąc coś takiego nie modyfikujesz wartości tego pola, zwracasz po prostu nową liczbę, która wynosi numberOfPlacesInSchool - 1. Jak się zastanowisz - to nie ma sensu.

return -1; po co?

Ok, a co do poprawnego rozwiązania:

  1. Potrzebujesz klasę reprezentującą pojedynczego studenta, klasę która będzie po prostu miała pola typu jego imię, nazwisko, itp.
  2. W SchoolService, zamiast tego co robisz, lepiej jakbyś miał stałą liczbę typu schoolCapacity i jej w żaden sposób nie ruszał po zainicjalizowaniu.
  3. W SchoolService chcesz mieć kolekcję obiektów typu Student z punktu 1 (https://www.javatpoint.com/collections-in-java)
  4. Metoda addStudent() jako parametr niech przyjmuje obiekt typu Student, a wewnątrz niech robi następującą logikę
  • sprawdza czy obecna ilość elementów w kolekcji studentów jest mniejsza niż schoolCapacity
  • jeżeli tak, niech doda studenta z parametru do tej kolekcji i wyświetli komunikat
  • jeżeli nie, niech wyświetli komunikat że szkoła zamknięta, nie ma miejsc

Zrób to, pokaż kod, jak coś to pomożemy. Jak będzie ok to wtedy kombinuj z deleteLastStudent(), podpowiem tylko że w tym przypadku bardzo pomocne może być wybranie odpowiedniej kolekcji, czyli takiej która trzyma kolejność wkładanych elementów.

0

ad1. Mam stworzoną klasę Student, z polami typu imię,nazwisko, wiek, ID, z geterami/seterami ,konstruktory rownież
ad2.zamieniłem
ad3. jak to zrobić??
ad4. jeśli dobrze rozumiem to () wrzucic Object Student??

2
  1. Pominę fakt, że te settery są pewnie zbędne, ale nie przejmuj się tym teraz
  2. Pokaż kod ;)
  3. Widziałeś link który wysłałem? W skrócie, kolekcja obiektów to po prostu worek który trzyma wiele różnych studentów, zależnie od wybranej implementacji kolekcji można robić na niej rzeczy jak add(Object obj), czy remove(Object obj). To co musisz zrobić to stworzyć taką kolekcję wewnątrz klasy SchoolService i w metodzie addStudent() którą piszesz odwołać się do tej kolekcji i to do niej dodać studenta. Może tutaj prostszy link na początek https://beginnersbook.com/2013/12/java-arraylist-add-method-example/
  4. Tak, coś takiego addStudent(Student student)
0

public class SchoolService {

private static int schoolCapacity;

public SchoolService(int numberOfPlacesInSchool) {
    this.schoolCapacity = numberOfPlacesInSchool;
}

public int getNumberOfPlacesInSchool() {
    return schoolCapacity;
}

public void setNumberOfPlacesInSchool(int numberOfPlacesInSchool) {
    this.schoolCapacity = numberOfPlacesInSchool;
}

public int deleteLastAddedStudent() {
    return getNumberOfPlacesInSchool() + 1;
}

public int addStudent(Object Student) {
    if (Student > 0) {
        return getNumberOfPlacesInSchool() - 1;
    } else {
        System.out.println("Lista jest pełna");
    }
}

ps tak już ogarnąlem link

1
private static int schoolCapacity;

public SchoolService(int numberOfPlacesInSchool) {
    this.schoolCapacity = numberOfPlacesInSchool;
}

static w konstruktorze przez this? Nie nie nie

public int deleteLastAddedStudent() {
	return getNumberOfPlacesInSchool() + 1;
}

Nadal masz te metodę, która robi coś zupełnie nielogicznego i nie związanego z usuwaniem studenta

public int addStudent(Object Student) {
	if (Student > 0) {

Przeczytaj mojego ostatniego posta, nie o to chodziło, i tak btw. to się nie skompiluje.

0

Wstawiam kod który gromadzi dane klasy Student, czy jest on poprawny??

    public static void main(String[] args) {


       Student[] student = new Student[4];
       student[0] = new Student("Hania", "Kozik", 22, 231);


    }
    private int schoolCapacity;
2
starsky859 napisał(a):

Wstawiam kod który gromadzi dane klasy Student, czy jest on poprawny??

    public static void main(String[] args) {


       Student[] student = new Student[4];
       student[0] = new Student("Hania", "Kozik", 22, 231);


    }
    private int schoolCapacity;

Nie jest poprawny.
To co zrobiłeś, tworzy 4 elementową tablicę studentów, czyli innymi słowy, tworzy pustą tablicę i rezerwuje w tej niej4 miejsca. Nastepnie na pierwsze (zerowe) miejsce w tej tablicy wkładasz jednego studenta, który tak się składa ma 4 parametry (stąd ta 4 u Ciebie w inicjalizacji tablicy?). Mając tablicę 4 elementową możesz zrobić coś takiego:

   Student[] student = new Student[4];
   student[0] = new Student("Hania", "Kozik", 22, 231);
   student[1] = new Student("Ania", "Kozik", 22, 231);
   student[2] = new Student("Jan", "Kozik", 22, 231);
   student[3] = new Student("Adam", "Kozik", 22, 231);

W ten sposób masz 4 różnych studentów w tej tablicy.

Dalej jednak, nie o to chyba chodzi w zadaniu. W skrócie, ta klasa o której wspomniałeś wcześniej (SchoolService), ma zarządzać tą tablicą. Parametr wejściowy z konstruktora czyli schoolCapacity powinien posłużyć jako inicjalizator tej tablicy (czyli użyjesz jego zamiast tej 4 w kodzie wyżej). Nastepnie, musisz napisać metody które jako parametr przyjmą obiekt typu Student i po sprawdzeniu że w tablicy jest miejsce, dodadzą go do niej lub nie.

#Edit
Przeczytałem jeszcze raz Twojego posta

Wstawiam kod który gromadzi dane klasy Student, czy jest on poprawny??

Poniekąd tak, tymi dwoma linijkami kodu tworzysz tablicę i wstawiasz do niej studenta. Wydaje mi się jednak, że ta 4 jako wielkość tablicy nie jest tam przypadkiem i nie do końca rozumiesz co zrobiłeś, stąd więc wyjaśnienie powyżej.

0

ok, tak wygląda klasa Student

public class Student {

private String firstName;
private String lastName;
private int age;
private int ID;




public Student(String firstName, String lastName, int age, int ID) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
    this.ID = ID;

public class SchoolService {

public static void main( SchoolService schoolServices[] = new SchoolService(schoolCapacity) {

}





private int schoolCapacity;

public SchoolService(int numberOfPlacesInSchool) {
    this.schoolCapacity = numberOfPlacesInSchool;
}
2

Używasz jakiegoś IDE? Widzisz, ze to się nawet nie skompiluje? Nie potrafię Cię naprowadzić na trop jak to zrobić, jeżeli chcesz się tego faktycznie nauczyć to radzę zacząć od absolutnych podstaw, bo brakuje Ci znajomości elementarnych pojęć i mechanizmów.

Tutaj masz szkielet oparty o to co mówiłem

public class SchoolService {
    private int schoolCapacity;
    private Student[] studentList;

    public SchoolService(int schoolCapacity) {
        this.schoolCapacity = schoolCapacity;
        this.studentList = new Student[schoolCapacity];
    }

    //addStudent, removeLastStudent methods

    public static void main(String[] args) {
        SchoolService schoolService = new SchoolService(15); //15 is just example, use whatever number you want
    }
}

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