Metoda w javie

0

Mam takie polecenie:

Utwórz klasę Wyraz zawierającą pole tablicę typu char[] i pole typu int.
Bezparametrowy konstruktor tworzący wyraz zainicjuje pola odpowiednio: tablicą o
rozmiarze 100 elementów i wartością 0. Metoda dodajZnak(char) pozwoli na dopisywanie kolejnych znaków do ciągu. Metoda wyswietl() wyświetli ciąg, a metoda
length() zwróci ilość znaków w ciągu.
Działanie programu przedstaw na przykładzie.

A to mój kod, problem w tym że nie wiem jak sprawić by metoda przechowywała wczesniej wprowadzone informacje, tzn. żeby miec mozliwosc stworzenia wyrazu składającego się więcej niz jednego znaku.

public class Wyraz {
    protected char[] tab;
    protected int x;
    
    Wyraz() {
        this.tab = new char[100];
        this.x = 0;
    }

    char[] dodajZnak(char y) {
        tab[x] = y;
        return tab;

    }


    void wyswietl() {
        for (int i = 0; i < x; i++) {
            System.out.print(tab[i]);
        }
        System.out.println();
    }

    int length() {
        return x;
    }


}
0

W dodajZnak zamiast tab[x] daj tab[x++]. W twoim kodzie x jest cały czas 0. Jak zamienisz na x++ to wartość x za każdym razem będzie zwiększana.

Dodatkowo zabezpiecz swój program na wypadek gdyby x przekroczył 99, bo przekroczysz rozmiar tablicy.

0

Nie dziala. Chodzi mi o to by raz wywołanie metody nie zaczynało wyrazu od nowa. Np. wpisujesz wyraz.dodajZnak('q'); to na indeksie zerowym jest już q kiedy znowu uruchomisz program to na indeksie nr.1 też bedzie q a wyraz brzmi "qq" chyba że za drugim razem wpiszesz 'a' wyraz.dodajZnak('a'); to wtedy ma być "qa" i tak to wyczerpania zapasów.

0

Twoje dodajZnak() ma działać w pętli, albo jak za każdym razem chcesz sobie odpalać program na nowo to użyj pliku tekstowego do, którego będziesz zapisywał a przy uruchomieniu odczytywał znaki, ewentualnie jakiegoś Redisa :P

0

myslalem ze modyfikowanie obiektów(zamiast tworzenia ich na nowo) jest czymś oczywistym.

0
Nie dziala. Chodzi mi o to by raz wywołanie metody nie zaczynało wyrazu od nowa. Np. wpisujesz wyraz.dodajZnak('q'); to na indeksie zerowym jest już q kiedy znowu uruchomisz program to na indeksie nr.1 też bedzie q a wyraz brzmi "qq" chyba że za drugim razem wpiszesz 'a' wyraz.dodajZnak('a'); to wtedy ma być "qa" i tak to wyczerpania zapasów.

No tak ale u Ciebie x jest cały czas 0 więc zawsze dodajesz znak na indeksie zerowym. Zwiększaj sobie x o 1, za każdym razem gdy dodajesz znak i będzie git.
Inna sprawa, że nie da się tak łatwo pamiętać stanu zapisu. Ta tablica jest w pamięci RAM, jak zamkniesz program i uruchomisz na nowo to znów będzie pusta. Sprecyzuj co potrzebujesz w tej kwestii zrobić

0

Na pewno twórca zadania miał na myśli zachowywanie stanu pomiędzy wywołaniami programu czy tylko pomiędzy wywołaniami metody dodajZnak()?
Ten "Bezparametrowy konstruktor tworzący ... zainicjuje pola ... tablicą ... 100 elementów i wartością 0." wskazuje raczej na to drugie.

0

to po co mi tablica o pojemnosci 100 elementów skoro mogę wpisać do niej tylko jeden element typu char?

0

nvm, pewnie chodziło o to że np. ```
Wyraz wyraz = new Wyraz();

    wyraz.dodajZnak('a');
    wyraz.dodajZnak('c');

    wyraz.wyswietl();
    wyraz.length();

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