Usuwanie elementów z tablicy

0

Witam. Mam za zadanie stworzyć metodę w Javie, która usunie wybrany element z listy. Dodałem już metodę dodającą element do listy. Tak wyglądają pola:

private int pojemnosc;
private int[] liczby=new int[pojemnosc];
private int rozmiar;

oraz konstruktor:

public Lista(int pojemnosc) 
   {
        this.pojemnosc = pojemnosc;
    }

A tak ta metoda:

public void dodajelement(int liczba)
   {
       rozmiar++;

       if(rozmiar>pojemnosc)
       {
           System.out.println("Lista jest przepełniona spróbuj odjąć element.");
       }
       else
       {
           for(int i=rozmiar-1;i<rozmiar;i++)
           {
               liczby[i]=liczba;
           }
       }
   }

A tak metoda wyświetlająca informacje o liście:

public void pisz()
    {
        System.out.println("Pojemność: "+pojemnosc);
        System.out.println("Rozmiar: "+rozmiar);
        System.out.print("Elementy: ");
        try{
            for(int i=0;i<rozmiar;i++)
            {
                System.out.print(liczby[i]+" ");
            }
        }
        catch (ArrayIndexOutOfBoundsException e)
        {
            System.out.println("\nZa długa lista");
        }

    }

Tak wygląda wynik na konsoli po dodaniu kilku elementów :

Pojemność: 10
Rozmiar: 6
Elementy: 0 1 2 4 8 16

Teraz muszę napisać metodę, która usunie liczbę podaną jako parametr. Nie wiem jak to zrobić, żeby w tej metodzie móc ingerować w wynik innej metody (tutaj pisz()). Proszę o pomoc i życzę miłego dnia.

0

Jeżeli chcesz usunąć element możesz przepisać wszystkie elementy do nowej tablicy, z pominięciem elementu do usunięcia. Następnie nową tablicą zastępujesz starą w której trzymasz elementy.

Innym wyjściem jest zaimplementowanie listy "po bożemu" z wykorzystaniem dodatkowej klasy, która będzie trzymała referencję elementu następnego i poprzedniego.

0

O co dokładnie chodzi, bo nie rozumieme. Masz usunąc konkretny element tablicy (nr indeksu), czy po wartości, czy obojętnie który np osatni? napisałeś tak; **Teraz muszę napisać metodę, która liczbę podaną jako parametr. ** USUNIE?

0
Haskell napisał(a):

Jeżeli chcesz usunąć element możesz przepisać wszystkie elementy do nowej tablicy, z pominięciem elementu do usunięcia. Następnie nową tablicą zastępujesz starą w której trzymasz elementy.

Innym wyjściem jest zaimplementowanie listy "po bożemu" z wykorzystaniem dodatkowej klasy, która będzie trzymała referencję elementu następnego i poprzedniego.

Ok, to wiem jak zrobić, ale jak przy pomocy metody to zrobić, żeby w metodzie pisz() zaszły takie zmiany.
Na przykład po stworzeniu instancji tej klasy mam:

Lista lista=new Lista(10);
lista.pisz() // 1 2 3 4 5
lista.usunLIczbe(4);
lista.pisz(); // 1 2 3 5

Wówczas wyświetli mi daną listę bez tej liczby.

0

Metoda pisz korzysta z pola liczby, więc wystarczy, że zmodyfikujesz te pole w metodzie usun i metoda pisz automagicznie też będzie znała te zmiany.

0
Haskell napisał(a):

Metoda pisz korzysta z pola liczby, więc wystarczy, że zmodyfikujesz te pole w metodzie usun i metoda pisz automagicznie też będzie znała te zmiany.

Napisałem taką oto metodę:

public void usunPierwszy(int liczba)
    {
        for(int i=0;i<rozmiar;i++)
        {
            if(liczby[i]==liczba)
            {
                for(int j=0;j<rozmiar;j++)
                {
                    liczby[i+j]=liczby[i+(j+1)];
                }
                break;
            }
        }
        rozmiar--;
    }

I jestem zadowolony, bo działa. Serdecznie dziękuję za pomoc. Życzę miłego wieczoru :)
PS. Napisałem break, bo miałem za zadanie usunąć tylko pierwszą liczbę, która jest taka sama jak parametr.

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