Usunięcie powtórzeń z tablicy

0

Witam,
muszę stworzyć kilka metod, między innymi:

  • usunięcie wszystkich elementów o podanej wartości;
  • wyeliminowanie z tablicy wszystkich powtórzeń.
    Napisałem coś takiego ale niestety pierwsza metoda nie działa poprawnie, gdy mamy dwie takie same liczby pod rząd, a druga działa jeszcze gorzej. Czy mógłby mi ktoś to poprawić lub podpowiedzieć jak to zrobić?
    PS. Nie mogę używać Array'a
 public class Tablica{
    int n;
    int[] tablica;
    
    public Tablica(int n, int z){
         this.n=n;
         tablica = new int[n];
         for(int i=0; i<tablica.length; i++)
             tablica[i] = (int)(Math.random()*z);
    }
    
    public void wyswietl(){
        for(int i=0; i<tablica.length; i++)
        System.out.print(tablica[i]+" ");
        System.out.println();
    }
    
    public void usunElement(int element){
        int u = 0;
        for(int i=0; i<tablica.length; i++){
            if(tablica[i] == element){
                for(int j=i; j<tablica.length-1; j++){
                    tablica[j] = tablica[j+1];
                }
                u++;
                tablica[tablica.length-u]=-1;
            }
        }
        int[] tab2 = new int[tablica.length-u];
        for(int i=0; i<tab2.length; i++){
            tab2[i] = tablica[i];
        }
        tablica = tab2;
    }
    public void usunPowtorzenia(){
        int u = 0;
        for(int i=0; i<tablica.length; i++){
            for(int j=i+1; j<tablica.length-1; j++){
                if(tablica[i]==tablica[j]){
                    for(int k=i; k<tablica.length-1; k++){
                        tablica[k]=tablica[k+1];
                    }
                    u++;
                }
            }
        }
        int[] tab2 = new int[tablica.length-u];
        for(int i=0; i<tab2.length; i++){
            tab2[i] = tablica[i];
        }
        tablica = tab2;
    }
}
  

0

Co to znaczy "usunąć element z tablicy"? Może tak:

public void usunElement(int element)
{
    for(int i=0; i<tablica.length; i++)
    {
         if(tablica[i] == element)
         {
             tablica[i]++;
         }
    }
}
0

To by było za proste :) Chodzi o to żeby stworzyć nową tablicę, która nie będzie zawierać niechcianego elementu i potem podstawić ją za starą. Chodzi o to żeby poprawić to co ja napisałem tak, aby w usuwało element również gdy powtórzy się on dwa razy z rzędu.

1

Sprecyzuj jakich klas nie wolno Ci użyć. Piszesz o klasie Array, w standardowej bibliotece są dwie klasy o tej nazwie. Obie są całkowicie nieprzydatne w tym zadaniu. Najprostsze rozwiązanie dla usunięcia powtórzeń to przepisać wszystkie elementy tablicy do zbioru (HashSet), a potem z powrotem do tablicy.

public void usunElement(int element)
{
    int ile = 0;
    for(int i=0; i<tablica.length; i++)
    {
        if(tablica[i] == element)
        {
            ile++;
        }
    }
    int[] tab2 = new int[tablica.length-ile];
    int j = 0; 
    for(int i=0; i<tablica.length; i++)
    {
        if(tablica[i] != element)
        {
            tab2[j] = tablica[i];
            j++;
        }
    }
    tablica = tab2;
}
0

Nie mogę żadnych klas używać, sory, że nieściśle wyraziłem o co mi chodziło ale to są moje początki programowania. Poradziłem już sobie ale dzięki za chęć pomocy. Zrobiłem to w ten sposób:

public class Tablica{
    int n;
    int[] tablica;
        
    public Tablica(int n, int z){
         this.n=n;
         tablica = new int[n];
         for(int i=0; i<tablica.length; i++)
             tablica[i] = (int)(Math.random()*z);
    }
    
    public void wyswietl(){
        for(int i=0; i<tablica.length; i++)
        System.out.print(tablica[i]+" ");
        System.out.println();
    }
   
 
  public void usunElement(int element){
        for(int i=0; i<n; i++){
            if(tablica[i]==element){
                tablica[i]=tablica[n-1];
                n--;
                i--;
            }
        }
        int[] tab2 = new int[n];
        for(int i=0; i<n; i++)
         tab2[i]=tablica[i];
        tablica=tab2;
    }
    public void usunPowtorzenia(){
        for(int i=0; i<n-1; i++){
            for(int j=i+1; j<n; j++){
                if(tablica[i]==tablica[j]){
                    for(int k=j; k<tablica.length-1; k++){
                        tablica[k]=tablica[k+1];
                    }
                    n--;
                    j--;
                }
            }
        }
        int[] tab2 = new int[n];
        for(int i=0; i<tab2.length; i++){
            tab2[i] = tablica[i];
        }
        tablica = tab2;
    }
} 

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