Kasowanie elementu z bazy

2013-04-13 12:41
0
import java.util.*; 

public class baza {

    private String imie;
    private String nazwisko;
    static Scanner load = new Scanner(System.in);
    static ArrayList<baza> lista = new ArrayList<baza>();

    baza(String imie, String nazwisko)
    {
        this.imie=imie;
        this.nazwisko=nazwisko;

    }

    static String podajImie()
    {
        System.out.print("Podaj imie ");
        String imie = load.nextLine();
        return imie;
    }

    static String podajNazwisko()

    {
        System.out.print("Podaj nazwisko ");
        String nazwisko = load.nextLine();
        return nazwisko;
    }

    static void usunObiekt()
    {       System.out.print("Podaj obiekt do usuniecia ");
            String usun = load.nextLine();

            for (int q=0; q<lista.size();q++) // !!!!!!!! Gdzieś Tu Jest Problem !!!!!!!!!!!!
                {
                if (lista.get(q).imie ==usun )
                    {
                    System.out.println("Poprawnie usunieto obiekt" + lista.get(q).imie + " "+lista.get(q).nazwisko);
                    lista.remove(q);
                    }
                }

    }

    public static void main(String[] args) {

        Scanner cin = new Scanner(System.in); //

        for (int i=0; i<3; i++)
        {
            baza lol = new baza(podajImie(), podajNazwisko());
            lista.add(lol);
        }

        usunObiekt();

        for(int q=0;q<lista.size();q++)
        {
            System.out.print(lista.get(q).imie+" ");
            System.out.println(lista.get(q).nazwisko);

        }

    }

}

Dlaczego po przeszukaniu if'em elementow z ArrayList obiekt nie chce sie usunąc?? Gdzie jest błąd?

edytowany 1x, ostatnio: furious programming, 2013-04-13 14:02

Pozostało 580 znaków

2013-04-13 12:52
0

Bo nie wolno usuwać z listy po której iterujesz w ten sposób. Przecież jak wyrzucisz element z listy to jej rozmiar się zmienia! Uzyj do tego iteratora.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2013-04-13 12:53
1

Stringi porównuje się inaczej.

lista.get(q).imie.equals(usun)

Drugi problem opisał @Shalom, jeśli w kolekcji są np. trzy osoby o imieniu Bartosz, to którą ma usunąć: pierwszą, ostatnią, losową, wszystkie?Jeśli pierwszą, to iterator jest niepotrzebny, wystarczy break po usunięciu.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 3x, ostatnio: bogdans, 2013-04-13 12:58

Pozostało 580 znaków

2013-04-13 13:01
0

dzięki bogdans, gra i trąbi

import java.util.*; 

public class baza {

    private static String imie;
    private static String nazwisko;

    static String getImie()
    {
        return imie;
    }
    static String getNazwisko()
    {
        return nazwisko;
    }

    static Scanner load = new Scanner(System.in);
    static ArrayList<baza> lista = new ArrayList<baza>();

    baza(String imie, String nazwisko)
    {
        this.imie=imie;
        this.nazwisko=nazwisko;

    }

    static String podajImie()
    {
        System.out.print("Podaj imie ");
        String imie = load.nextLine();
        return imie;
    }

    static String podajNazwisko()

    {
        System.out.print("Podaj nazwisko ");
        String nazwisko = load.nextLine();
        return nazwisko;
    }

    static void usunObiekt()
    {       System.out.println("Podaj obiekt do usuniecia ");
            System.out.print("Podaj imie ");
            String usunImie = load.nextLine();
            System.out.print("Podaj nazwisko ");
            String usunNazwisko = load.nextLine();

            for (int q=0; q<lista.size();q++)
                {
                if (lista.get(q).imie.equals(usunImie) || lista.get(q).nazwisko.equals(usunNazwisko) )
                    {
                    System.out.println("Poprawnie usunieto obiekt " + lista.get(q).imie + " "+lista.get(q).nazwisko);
                    lista.remove(q);
                    }
                }

    }

    static boolean czyJestWBazie(String imie, String nazwisko)
    {   int w=0;
        for (int q=0; q<lista.size();q++)
        {
            if (lista.get(q).imie.equals(imie) && lista.get(q).nazwisko.equals(nazwisko) )
            {   
                w++;
                break;
            }

        }
        if (w==0)
        {
            return true;
        }
        else
        {
            return false;
        }

    }

    public static void main(String[] args) {

        Scanner cin = new Scanner(System.in); //OBIEKT DO ODEBRANIA DANYCH OD UŻYTKOWNIKA

        for (int i=0; i<3; i++)
        {
            baza lol = new baza(podajImie(),podajNazwisko());

            if(czyJestWBazie(getImie(),getNazwisko()))
            {
                            lista.add(lol);
                            System.out.println(" dodalem :)");
            }
            else
            {
                System.out.println("  niedodam :)");
            }
        }

        usunObiekt();

        for(int q=0;q<lista.size();q++)
        {
            System.out.print(lista.get(q).imie+" ");
            System.out.println(lista.get(q).nazwisko);

        }

    }

}

Kurcze nie dodaje mi obiektu, coś namieszalem prosze o rzucenie na to okiem :) cos sie psuje z funkcja czyJestWBazie();

Pozostało 580 znaków

2013-04-13 14:39
0

Po co zwiększasz w?

                        if (lista.get(q).imie.equals(imie) && lista.get(q).nazwisko.equals(nazwisko) )
                        {        
                                w++;
                                break;
                        }

Krótsza wersja funkcji

static boolean czyJestWBazie(String imie, String nazwisko)
{
        for (int q=0; q<lista.size();q++)
        {
              if (lista.get(q).imie.equals(imie) && lista.get(q).nazwisko.equals(nazwisko) )
              {        
                     return true;
              }
        }
        return false;
}

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2013-04-13 14:41

Pozostało 580 znaków

2013-04-13 15:19
0

Kurcze zmienilem tą funkcje na Twoją i nadal nie chce dodać..

edytowany 1x, ostatnio: kzklozet, 2013-04-13 15:20

Pozostało 580 znaków

2013-04-13 15:25
0

A nie powinno być tak?

if(!czyJestWBazie(getImie(),getNazwisko()))
{
    lista.add(lol);
    System.out.println(" dodalem :)");
}
else
{
    System.out.println("  niedodam :)");
}

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2013-04-13 15:31
0

Nie dokońca działa, dodaje tylko 1 element. Poźniej juz żadnego. Zastanawiające:)

Pozostało 580 znaków

2013-04-13 15:44
0

Nie, tak działa bo pola imie i nazwisko są static.
Za pierwszym razem (kolekcja jest pusta) dodaje do kolekcji np. osobnika Jan Chrzan, za drugim razem (kolekcja zawiera jedna osobę) próbujesz dodać osobniczkę Ewa Zdrzewa, pola są static, więc wywołanie

baza lol = new baza("Ewa","Zdrzewa");

zmienia wartość pola imie na z "Jan" na "Ewa", a pola nazwisko na z "Chrzan" na "Zdrzewa" => funkcja czyJestWBazie() zwraca true.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 2x, ostatnio: bogdans, 2013-04-13 15:46

Pozostało 580 znaków

2013-04-13 16:31
0

Hmm to co zmienić żeby dodawał po kolei z klawiatury imię i nazwisko? Static mi zasugerował Eclipse...

Pozostało 580 znaków

2013-04-13 18:12
0

Takiego programu nie da się umieścić w jednej klasie, klasa baza może wyglądać tak:

class baza {

        private String imie;
        private String nazwisko;

        String getImie()
        {
                return imie;
        }
        String getNazwisko()
        {
                return nazwisko;
        }

        baza(String imie, String nazwisko)
        {
                this.imie=imie;
                this.nazwisko=nazwisko;

        } 
}

Resztę (odpowiednio zmienioną, np. imie => getImie(), wymaganych zmian jest więcej) umieść w klasie TestBazy.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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