Klasa z tablicą

Odpowiedz Nowy wątek
2011-10-17 23:40
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

edytowany 1x, ostatnio: pawel_d, 2011-10-17 23:40

Pozostało 580 znaków

2011-10-18 00:49

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)
{
...
}


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 1x, ostatnio: krwq, 2011-10-18 00:49

Pozostało 580 znaków

2011-10-18 07:39
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)

Pozostało 580 znaków

2011-10-18 17:54
bo
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--;

Pozostało 580 znaków

2011-10-18 18:14
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 ;)

Pozostało 580 znaków

2011-10-18 18:26
bo
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.

Pozostało 580 znaków

2011-10-18 19:23
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!

Pozostało 580 znaków

2011-10-18 23:22
0

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

Pozostało 580 znaków

2011-10-19 00:15
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.

W Javie dostęp do obiektów jest możliwy wyłącznie przez "wskaźniki", które są nazywane referencjami. Wszystkie tablice są prawdziwymi klasami, a tablice typów nie prostych przechowują wyłącznie referencje do obiektów, które "przechowują". To samo dotyczy tablic wielowymiarowych, które faktycznie są tablicami przechowującymi referencje do tablic następnego wymiaru. W efekcie referencje tablic wielowymiarowych przypominają drzewko. A tablice wielowymiarowe o rozmiarze zawsze równym 2 są drzewami binarnymi. - Olamagato 2011-10-22 11:21
Dziękuję za informację. - szasza 2011-10-24 02:10

Pozostało 580 znaków

2011-10-19 11:29
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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