Usuwanie elementów z tablicy

Usuwanie elementów z tablicy
SI
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad rok
  • Postów:61
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:

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

oraz konstruktor:

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

A tak ta metoda:

Kopiuj
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:

Kopiuj
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.

edytowany 2x, ostatnio: sigmaalgebra
Haskell
  • Rejestracja:prawie 10 lat
  • Ostatnio:12 miesięcy
  • Postów:4700
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.


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
EI
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 2 lata
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?

edytowany 1x, ostatnio: Eiten
SI
Tak tak, usunie. Przepraszam, już poprawiłem.
SI
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad rok
  • Postów:61
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.

Haskell
  • Rejestracja:prawie 10 lat
  • Ostatnio:12 miesięcy
  • Postów:4700
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.


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
SI
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad rok
  • Postów:61
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ę:

Kopiuj
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.

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.