Jak napisać własną klasę String w oparciu o tablice Char?

Jak napisać własną klasę String w oparciu o tablice Char?
Tomasz J
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:22
0

Cześć wszystkim,

Mam poważny problem w moim życiu i w dążeniu do bycia programistą. Skończyłem kurs, wiele nauki i pierwszy staż jako dev. I wszystko szło dobrze dopóki mogłem korzystać z gotowego programu i go poprawiać aż do momentu kiedy mój opiekun chciał mnie sprawdzić tak ogólnie i wyszło na to, że nie umiem od 0 napisać własnego kodu.
Dostałem takie zadanie:

Napisz program, w którym zaimplementujesz własną klasę String w oparciu o tablicę znaków. Niech klasa ta nazywa się ChrStr. Niech ChrStr wystawia następujące publiczne API:
ChrStr()
ChrStr(String input)
length() - długość łańcucha znaków
trim() - obcięcie spacji z początku i z końca
append(char) - dostawienie znaku na końcu
insert(index,char) - wstawienie znaku w dowolną pozycję index łańcucha. Jeśli index przekracza length, to brakujące znaki uzupełnić spacjami.
Przykład:
'ala ma kota'
insert(15,'z')
'ala ma kota z'
toString() - wyświetla zawartość naszej klasy na standardowym wyjściu

Oto mój kod (tak wiem, że bieda :/ )

Kopiuj
package org.example;

public class ChrStr {

    int size = 1000;
    char array[] = new char[size];

    public ChrStr(){

    }

    public ChrStr(char[] array){
        this.array = array;
    }

    public ChrStr(String input){
        if (input == null ){
            throw new IllegalArgumentException("this is not String");
        } else {
            for (int i = 0; i< array.length; i++){
                System.out.println(array[i]);
            }
        }
    }
    public ChrStr lenghtBebechy(){
        return null;
    }
    public ChrStr trimBebechy(){
        return null;
    }
    public ChrStr appendBebechy(char sign){
        return null;
    }
    public ChrStr insertBebechy(int index,char sign){
        return null;
    }
    //pokazuje mi, że tu ma być String ale muszę tu użyć swojej klasy chyba tak ?
    public ChrStr toString(){
        return null;
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");

        String nazwa = "nazwa";

        nazwa.length();
        nazwa.trim();

        char sign = '!';

        StringBuilder nazwa1 = new StringBuilder().append("c").insert(1,1);
        System.out.println(nazwa1);

        ChrStr chrStr = new ChrStr("name");
        System.out.println(chrStr);
    }

}

Umiem używać gotowców znam te komendy i zdaje mi się, że rozumiem ich działanie ale zdaniem mojego opiekuna i co jest prawdą nie umiem myśleć jak maszyna i to jest mój problem. Dlatego nie mogę stworzyć nic od zupełnego zera.

Nie wiem czy rozwiązanie przez kogoś coś mi da.
Być może ktoś będzie miał chęci mi to jakoś wytłumaczyć albo powiedzieć co mogę w sobie zmienić żeby się przełamać. Bardzo chce programować i muszę walczyć ale sam już nie daje rady, dlatego potrzebuje dobrego ducha który mi poradzi jak sobie z tą barierą poradzić.

Za wszelaką pomoc z góry dziękuje .

edytowany 1x, ostatnio: Patryk27
RequiredNickname
czemu zakładasz, że coś rozumiesz skoro konstruktora używasz do wypisywania znaków na ekran? 0_o
ZD
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
2

@Tomasz J:

Fajne studenckie zadanie, nie robi krzywdy ... na godzinę (gdybym Cię miał zatrudniać, wymagałbym godziny ... no moze kosmetyczny margines litości, ale nie x2)
To tak mówię, bo czasem zadania są totalnie głupie, antydydaktyczne, to jest fajne i uczciwe ... *)

Kopiuj
   //pokazuje mi, że tu ma być String ale muszę tu użyć swojej klasy chyba tak ?
    public ChrStr toString(){
        return null;
    }

Chyba mimo zadania, warto by mieć choć jeden punkt wspólny z fabrycznym Stringiem, choćby po to, aby do wydrukować. Metoda toString jest standardową w Object, wiec każda klasa javowska chce czy nie, musi go mieć

Kopiuj
   @Override
    public String toString(){
      ... 
    }

*) a że w ścieżce coś nie pykło ...
Metody nie zaimplementowane, to z czym właściwie do nas przychodzisz ... konstruktory bardzo chropowate ...


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
edytowany 2x, ostatnio: ZrobieDobrze
ZD
Bosch ... serio ze Springiem się bijesz ?
Tomasz J
No mam stworzyć sam klasę String od podstaw i metody jak w poście i nie wiem jak ...
Tomasz J
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:22
0
ZrobieDobrze napisał(a):

@Tomasz J:

Chyba mimo zadania, warto by miec choć jeden punkt wspólny z fabrycznym stringiem, choćby po to, aby do wydrukować. toString jest standardową metodą w Object, wiec każda klasa javowska chce czy nie, musi go mieć

Kopiuj
   @Override
    String toString(){
      ... 
    }

ok rozumiem, już poprawione

DA
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 dni
  • Postów:176
0
  1. Twój konstruktor wypisuje znaki, a powinien je przechowywać w tablicy.
  2. length() - sprawdź które pola w tablicy masz puste, a które wypełnione i na tej podstawie zwróć rozmiar
  3. trim() - jeżeli znak jest spacją, to go usuń z tablicy
  4. append() - znajdź pierwszy pusty znak w tablicy i dostaw nowy w jego miejsce
  5. insert() - wstaw wymagany znak pod zadane pole w tablicy, resztę znaków musisz przesunąć.
Tomasz J
aha coś takiego... okej już mi się robi jaśniej :)
ZD
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
2
Tomasz J napisał(a):

Mam poważny problem w moim życiu i w dążeniu do bycia programistą. Skończyłem kurs, wiele nauki

"Skończyłem kurs" ... a czytałem coś solidnego? Jakiś Hosrtsman - o ile wielu pytającym polecam wydania "zaawansowane" Hosrstmana, to dla ciebie i bazowa by była zbawienna., Joshua Bloch. Sorry, ale to elementarz obiektowości i javy (nie mówię o proceduralnych hello worldach na 50 linii)
Nikt rozsądny nie będzie specjalnie dla ciebie pisał wiedzy dostępne w bazowej ksiażce

Widocznie był to słaby kurs.
Nie weź tego emocjonalnie, ale w moim zespole nie byłoby z ciebie pożytku. Nie mamy etatu niańki na aproduktywnymi stażystami.

.. w dążeniu do bycia programistą. ..

To zawód, gdzie STALE się ryje za wiedzą, uzupełnia, dokształca, tworzy wersje próbne, kasuje lub refaktoryzuje .. pewien jesteś że to dla ciebie ?


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
Zobacz pozostałe 3 komentarze
ZD
kto cię skrzywdził i na tym etapie wciągnął np w Springa (z innych postów) ? Tu też nie wiadomo po co dałeś tag 'backend'
Tomasz J
co mam powiedzieć, taki był kurs ... z resztą mniejsza oto, muszę zająć się tym zadaniem i je zrobić, to jest teraz najważniejsze, a co do braków to wiem, że je mam, chyba widać. Nie jest ze mną aż tak źle bo jednak czegoś mnie ten kurs nauczył. Muszę tylko uzupełnić puste miejsca i będzie git. Mam 3 miesiące i jak w Asterixie albo mi się uda albo na pożarcie krokodylom i powrót do roboty której nienawidzę a na to drugie nie ma szans więc wszystko albo nic!
ZI
Czytajac ksiazki nie nauczysz sie prowadzic samochodu. Praktyka, musisz sie oswoic z tym i dobrze bedzie :)
Tomasz J
Tak tak masz racje. Czytam książki ale kodować też koduje. Praktyka czyni mistrza, a ja nie zamierzam się poddawać i stracić po stażu praktycznie pewnej i bardzo dobrej roboty a do fabryki to ja na pewno nie wrócę brrrrr. Aż mnie ciarki przechodzą na samą myśl xD
ZD
"Czytajac ksiazki nie nauczysz sie prowadzic samochodu. ' — Ziemiak dziś, 13:36 " Tak, ale tu ma zaproponować projekt tarczy sprzęgła
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:3 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
2
Tomasz J napisał(a):
Kopiuj
     int size = 1000;
     char array[] = new char[size];

A jak będziesz miał więcej niż 1000 znaków to co zrobisz?

Kopiuj
     public ChrStr(String input){
         if (input == null ){
             throw new IllegalArgumentException("this is not String");
         } else {
             for (int i = 0; i< array.length; i++){
                 System.out.println(array[i]);
             }
         }
     }

Jak już była mowa wypisujesz zamiast przypisywać

Kopiuj
     public ChrStr lenghtBebechy(){
         return null;
     }
     public ChrStr trimBebechy(){
         return null;
     }
     public ChrStr appendBebechy(char sign){
         return null;
     }
     public ChrStr insertBebechy(int index,char sign){
         return null;
     }
     //pokazuje mi, że tu ma być String ale muszę tu użyć swojej klasy chyba tak ?
     public ChrStr toString(){
         return null;
     }

Po co tworzysz metody na zapas? Jeszcze z tak głupimy nazwami?


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:3 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
2

Ja proponuję zacząć od takiego działąjącego minimum:

Kopiuj
class ChrStr {
  private char state[];

  public ChrStr() {
    state = new char[];
  }
  public ChrStr(String value) {
    state = value.toCharArray();
  }

  public String toString() {
    return String.valueOf(state);
  }

  public int length() {
    return state.lenght;
  }
}

Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
Tomasz J
ok przyjąłem, dzięki
ZD
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
1
Tomasz J napisał(a):
Kopiuj
        String nazwa = "nazwa";

To jest fabryczny String, a nie twój.Nawiasem mówiac jedynie fabryczny da się tak zainicjować literałem w pazurkach (to wynika z wysokiej kompatybilności w budowie języka Java)

Na twoim ma to wyglądać - i nie wyobrażam sobie inaczej:

Kopiuj
ChrStr  my = new ChrStr ("nazwa")

If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
Tomasz J
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:22
0

Myślę, że z tego wszystkiego jestem już w stanie coś ukodzić. Biorę się do roboty.

piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:17 dni
  • Postów:3277
0
Tomasz J napisał(a):
Kopiuj
package org.example;

public class ChrStr {

    int size = 1000;//skąd wiesz jaki rozmiar będzie potrzebny? Potrzebujesz wiedzieć na tym etapie?
    char array[] = new char[size];

    public ChrStr(){
      //utwórz pustego "stringa"
    }

    public ChrStr(char[] array){
        this.array = array; //wycieka ci array, można zmienić dane twojej klasy z zewnątrz, zmieniając to co jest w parametrze
    }

    public ChrStr(String input){
        if (input == null ){
            throw new IllegalArgumentException("this is not String");//czemu nie utworzyć pustego stringa?
        } else {
            for (int i = 0; i< array.length; i++){
                System.out.println(array[i]);//co to ma robić? czemu nie zrobisz array = input.toCharArray()?
            }
        }
    }
    public ChrStr lenghtBebechy(){
        return null; //WTF?
    }
    public ChrStr trimBebechy(){
        return null; //WTF2?
    }
    public ChrStr appendBebechy(char sign){
        return null; //WTF3
    }
    public ChrStr insertBebechy(int index,char sign){
        return null; //WTF4?
    }
    //pokazuje mi, że tu ma być String ale muszę tu użyć swojej klasy chyba tak ?
    public ChrStr toString(){
        return null; //return new String(array)
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");


        String nazwa = "nazwa";

        nazwa.length();
        nazwa.trim();

        char sign = '!';

        StringBuilder nazwa1 = new StringBuilder().append("c").insert(1,1);
        System.out.println(nazwa1);
//a tego co wyżej, to nie powinieneś jednak zrobić "swoją" klasą?

        ChrStr chrStr = new ChrStr("name");
        System.out.println(chrStr);// to ci zadziała, jak prawidłowo zaimplementujesz metodę toString()
    }

}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.