Klasa z tablicą

0

Witam. Mam takie zadanie:

  1. Zdefiniuj klasę Tablica. Obiekty tej klasy powinny móc zapamiętać do 100 liczb całkowitych. Liczba aktualnie pamiętanych elementów jest zmienna. Klasa posiada:
    a. Dwa pola prywatne – tablicę oraz liczbę aktualnie zapisanych w niej elementów.
    b. Konstruktory
    i. przyjmujący tablicę liczb całkowitych
    ii. przyjmujący obiekt typu Tablica
    (...)

Na razie dalsza część jest nieistotna. Rzecz ma się w tym - jak zrobić te podpunkty a. i b.? Napisałem do tej pory coś takiego:

public class Tablica
{
    //Pola prywatne
    private int [] tablica = new int[100]; //tablica pamietaja do 100 liczb calkowitych
    private int liczbaElementow = 0; //liczba aktualnie pamietanych elementow
    
    //Konstruktory
    public Tablica() //konstruktor przyjmujący tablicę liczb całkowitych
    {liczbaElementow=0;}
    
}

Czy to jest dobry kod oraz jak napisać konstruktor przyjmujący obiekt typu Tablica? Z góry dzięki za pomoc

1

public Tablica() - to jest konstruktor domyślny
konstruktor przyjmujący tablicę liczb będzie wyglądał mniej więcej tak (nie znam javy):
public Tablica(int [] tab)
{
...
}

a przyjmujący obiekt tablicy tak:
public Tablica(Tablica ob)
{
...
}

0

Dzięki wielkie!

Jeszcze jedna rzecz - mam zrobić usuwanie wybranego elementu.

Mam jednak warunek, że obiekty tej klasy Tablica powinny móc zapamiętać do 100 liczb całkowitych, a więc mój obiekt tablica (typu Tablica) powinien jak rozumiem mieć cały czas rozmiar 100.

Jak w takim razie usunąć wybrany element z takiej tablicy? Mógłbym wpisać: tablica[k]=0; ale to nie będzie przecież usunięcie tylko przypisanie liczby 0...Jak więc mogę usunąć taki element z tablicy?

Aktualnie mój kod wygląda tak:

public class Tablica
{
    //Pola prywatne
    private int [] tablica = new int[100]; //tablica pamietajaca do 100 liczb calkowitych
    private int liczbaElementow = 0; //liczba aktualnie pamietanych elementow
    
    //Konstruktory
    public Tablica(int[] tablica) //konstruktor przyjmujacy tablice liczb calkowitych
    {liczbaElementow=0;}
    
    public Tablica(Tablica tablica) //konstruktor przyjmujacy obiekt tablica typu Tablica
    {liczbaElementow=0;}
    
    //Metody
    public int [] pobierzTablice() //metoda zwracajaca tablice
    {return tablica;}
    
    public int pobierzLiczbeElementow() //metoda zwracajaca liczbe elementow tablicy
    {return liczbaElementow;}

I teraz muszę dopisać tą metodę usunZK(int k)

1

To jest absurd, żeby do takich rzeczy (usuwanie elementu) używać tablic. Jak już musisz, to zrób to tak:

for(int i=k;i<99;i++)
{
    tab[i]=tab[i+1];
}
liczbaElementow--;
0

Też tak uważam, ale cóż - mój prowadzący z laborek ma różne dziwne pomysły jak widać...Dzięki za podpowiedź. Tylko, że to jedynie poprzesuwa mi elementy, a z kolei zostanie mi podwójnie to co było na końcu tj. jeśli cała tablica była zapełniona załóżmy liczbami od 1 do 100 po kolei i usuwamy np. element o indeksie 50 to po takim usuwaniu (przesuwaniu) będzie tab[98]==100; tab[99]==100; czyli ostatni element tablicy podwoi się tak jakby ;)

0

A w czym to przeszkadza? Pole liczbaElementow pamięta, ile początkowych elementów tablicy jest istotnych (zostało wcześniej zapamiętanych). Wartość końcowych elementów tablicy nie ma żadnego znaczenia.

0

Z jednej strony tak. Z drugiej strony w tej samej klasie mialem do zdefiniowania "Metodę dodajNaK(int x, int k) dodającą element na pozycję k w tablicy". Czyli niekoniecznie muszą być to początkowe elementy. Ale to już małe piwo. Już sobie poradzę dalej z tym. A w razie czego będę jeszcze pisał. Dzięki za pomoc!

0

A jak skopiować tablicę z jednej klasy do drugiej?

1

Dodać do pierwszej klasy getera, a do drugiej settera.

class Array {
...
public int[] getArray() {
    return array;
 }
}
class Array2 {
public setArray(Array ar) {
  selfArray = ar;
}
}

Nie jestem pewien czy w Javie można otrzymywać dostęp do kolejnych elementów tablicy za pomoc referencji tak jak za pomocą wskaźników w C.

0

W sumie to tablica nie jest Array akurat, ale już sobie spróbuję coś z tym kodem podziałać, dzięki za podpowiedź

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