jak obsługiwać obiekty w ArrayList()

Odpowiedz Nowy wątek
2008-04-16 10:52
0
package nauka;
import java.util.*;

public class Lista {
public static void main (String[] args){
obiekty o1 = new obiekty();
obiekty o2 = new obiekty();

    ArrayList lista = new ArrayList();
    lista.add(o1);
    lista.add(o2);

}
}

class obiekty{
    int w1 = 0;
    int w2 = 2;
}

mam taki oto przykładowy program, jak widać nie robi nic szczególnego tworzy sobie 2 obiekty klasy obiekt po czym wrzuca je do ArrayList-a
i tu właśnie zaczyna się mój problem czy można w jakikolwiek sposób manipulować na tych obiektach w ArrayList ?? dla przykładu
lista[0].w1=3;
to oczywiście nie działa ale man nadzieje że w pełni obrazuje co chcę osiągnąć.
Jeśli ArrayList nie posiada takiej funkcjonalności to prosił bym o wskazanie innej tablicy która mi to umożliwi.
Z góry dziękuje za pomoc.

Pozostało 580 znaków

2008-04-16 11:11
bogdans
0

Java ma bardzo dokładną dokumentację, naucz się z niej korzystać.

package nauka;
import java.util.*;

public class Lista {
public static void main (String[] args){
obiekty o1 = new obiekty();
obiekty o2 = new obiekty();

        ArrayList<obiekty> lista = new ArrayList<obiekty>();
        lista.add(o1);
        lista.add(o2);

}
}

class obiekty{
        int w1 = 0;
        int w2 = 2;
}
lista.get(0).w1=3;

pozdrawiam

Pozostało 580 znaków

2008-04-16 11:35
0

kombinowałem w tym kierunku ale to niestety nie działa :/
kod po modyfikacji :

package nauka;

import java.util.*;

public class Lista {
public static void main (String[] args){
obiekty o1 = new obiekty();
obiekty o2 = new obiekty();

    ArrayList lista = new ArrayList();
    lista.add(o1);
    lista.add(o2);
    lista.get(0).w1=3;

}
}

class obiekty{
    int w1 = 0;
    int w2 = 2;
}
wynik w konsoli :
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    w1 cannot be resolved or is not a field

    at nauka.Lista.main(Lista.java:12)

linia nr 12 : zawiera kod : lista.get(0).w1=3;

Pozostało 580 znaków

2008-04-16 11:44
bogdans
0
ArrayList lista = new ArrayList();

to nie to samo co

ArrayList<obiekty> lista = new ArrayList<obiekty>();

W pierwszym przypadku musisz jeszcze rzutować:

(obiekty)(lista.get(0)).w1=3;

Pozostało 580 znaków

2008-04-16 14:25
0

chyba jakiś dziwny jestem ale po zmianach kod wygląda tak

package nauka;
import java.util.*;

public class Lista {
public static void main (String[] args){
obiekty o1 = new obiekty();
obiekty o2 = new obiekty();

    ArrayList<obiekty> lista = new ArrayList<obiekty>();
    lista.add(o1);
    lista.add(o2);
    (obiekty)(lista.get(0)).w1=3;
}
}

class obiekty{
    int w1 = 0;
    int w2 = 2;
}

wynik w konsoli :

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    The type ArrayList is not generic; it cannot be parameterized with arguments <obiekty>
    Syntax error, parameterized types are only available if source level is 5.0
    The type ArrayList is not generic; it cannot be parameterized with arguments <obiekty>
    Syntax error, parameterized types are only available if source level is 5.0
    obiekty cannot be resolved
    Syntax error, insert "AssignmentOperator Expression" to complete Assignment
    Syntax error, insert ";" to complete Statement

    at nauka.Lista.main(Lista.java:9)

EDIT:

zrobiłem trochę inaczej zamiast ArrayList użyłem zwykłej tablicy o tak :

obiekty [] lista = new obiekty[10];
    lista[0]=o1;
    lista[1]=o2;
    lista[0].w1=2;

nie jest to co prawda szczyt marzeń ale działa
dzięki za próbę pomocy.

Pozostało 580 znaków

2008-04-16 14:36
bogdans
0

Czytaj odpowiedzi uważniej.
Można tak (dla nowej Javy co najmniej 5, to ci napisał kompilator):

package nauka;
import java.util.*;

public class Lista {
public static void main (String[] args){
obiekty o1 = new obiekty();
obiekty o2 = new obiekty();

        ArrayList<obiekty> lista = new ArrayList<obiekty>();
        lista.add(o1);
        lista.add(o2);
        lista.get(0).w1=3;
}
}

class obiekty{
        int w1 = 0;
        int w2 = 2;
}

lub tak (dla starszych wersji):

package nauka;
import java.util.*;

public class Lista {
public static void main (String[] args){
obiekty o1 = new obiekty();
obiekty o2 = new obiekty();

        ArrayList lista = new ArrayList();
        lista.add(o1);
        lista.add(o2);
        (obiekty)(lista.get(0)).w1=3;
}
}

class obiekty{
        int w1 = 0;
        int w2 = 2;
}

a ty zrobiłeś dziwną hybrydę

Pozostało 580 znaków

2008-04-17 00:12
koloture
0

dla starej wersji jest
<b>((</b>obiekty)lista.get(0)).w1=3
a nie
(obiekty)(lista.get(0)).w1=3
pozdro

Pozostało 580 znaków

2009-04-04 15:32
WrRaThY
0

mam bardzo mnie nurtujace pytanie, mianowicie przerobilem sobie troszke ten program i mam zgryz...

public class ArrayListTry1 {
    static void wypisz(ArrayList lista, int size){
        if (lista.isEmpty() == true){
        System.out.println("lista jest pusta");
        }
        else{
            for (int i = 0; i<lista.size();i++)
            System.out.println("obiekt o" + (i+1) + " " + lista.get(i).w1 + " " +lista.get(i).w2);
        }
    }
    public static void main (String[] args){
    obiekty o1 = new obiekty();
    obiekty o2 = new obiekty();

        ArrayList<obiekty> lista = new ArrayList<obiekty>();
        //for (int i = 0; i<lista.size();i++)
        //System.out.println("obiekt o" + (i+1) + " " + lista.get(i).w1 + " " +lista.get(i).w2);

        lista.add(o1); 
        //for (int i = 0; i<lista.size();i++)
        //System.out.println("obiekt o" + (i+1) + " " + lista.get(i).w1 + " " +lista.get(i).w2);

        lista.add(o2); 
        //for (int i = 0; i<lista.size();i++)
        //System.out.println("obiekt o" + (i+1) + " " + lista.get(i).w1 + " " +lista.get(i).w2);

        lista.get(0).w1=3;
        //for (int i = 0; i<lista.size();i++)
        //System.out.println("obiekt o" + (i+1) + " " + lista.get(i).w1 + " " +lista.get(i).w2);
    }
}

 class obiekty{
        public double w1 = Math.random()*(10);
        public double w2 = Math.random()*(10);
}

to co jest wykomentowane oczywiscie poprawnie wyswietla dane, natomiast proba implementacji funkcji to robiacej spelzla na niczym. moglbys ktos dopomoc?

Pozostało 580 znaków

2009-04-04 19:50
0
  1. Wywal parametr int size z metody wypisz(). Każdy kontener w Javie ma albo pole length, albo metodę size(). W obu rozmiar jest zawarty w samym kontenerze. Co zresztą używasz.
  2. Twoja metoda wypisz pobiera paramater ArrayList, która jest z grubsza tym samym co ArrayList<object>. Nie ma to nic wspólnego z ArrayList<obiekty>. Referencja do obiektu po wyciągnięciu za pomocą get(i) powininna zostać jeszcze zrzutowana do referencji na klasę (obiekty). Nie ma takiej potrzeby gdybyś jako parametr podał ArrayList<obiekty> lista.
    Tu jeszcze uwaga - nadawaj klasom pierwszą literę dużą. Utrzymywanie tej konwencji pozwoli Ci uniknąć przyszłych trudnych do znalezienia błędów.

Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?

Pozostało 580 znaków

2009-04-04 19:53
WrRaThY
0

dzieki. gupi blad. ps. zeby sie potomni za duzo natrudzic z przerabianiem nie musieli, oto gotowy chyba w maire przejrzysty kodpackage arraylisttry1;

/*

@author WrRaThY
*/</li> </ul>

import java.util.;
//import java.io.
;

public class ArrayListTry1 {

static private void wypisz(ArrayList<obiekty> lista){
if (lista.isEmpty() == true){
System.out.println("lista jest pusta");
}
else{
for (int i = 0; i<lista.size();i++)
System.out.println("obiekt o" + (i+1) + " " + lista.get(i).w1 + " " +lista.get(i).w2);
}
}

public static void main (String[] args){
Obiekty o1 = new Obiekty();
Obiekty o2 = new Obiekty();

ArrayList<Obiekty> lista = new ArrayList<Obiekty>();
wypisz(lista);
lista.add(o1); wypisz(lista);
lista.add(o2); wypisz(lista);
lista.get(0).w1=3; wypisz(lista);

}
}

class Obiekty{
public double w1 = Math.random()(10);
public double w2 = Math.random()
(10);
}

Pozostało 580 znaków

2009-04-04 19:56
0
import java.util.ArrayList;

class MojaLista extends ArrayList<Obiekt>{
    public MojaLista(){
        super();
    }
    public boolean add(Obiekt o){
        return super.add(o);
    }
    public String toString(){
        String str = "";
        for(int i = 0; i < size(); i++){
            str += get(i).toString() + " ";
        }
        return str;
    }
}

class Obiekt{
    public Obiekt(int i1, int i2){
        w1 = i1;
        w2 = i2;
    }
    public void setW1(int w){
        w1 = w;
    }
    public void setW2(int w){
        w2 = w;
    }
    public String toString(){
        return w1 + " " + w2;
    }
    private int w1;
    private int w2;
}

public class Katalog{
    public static void main(String[] argv){
        Obiekt o1 = new Obiekt(1,2);
        Obiekt o2 = new Obiekt(4,5);
        MojaLista ml = new MojaLista();
        ml.add(o1);
        ml.add(o2);
        System.out.println(ml.toString());      
    }
}

Tak w ramach treningu. Raczej starajcie się unikać staticów. Mało obiektowo. A każdy obiekt ma toString() więc korzystajcie z tego. No i oczywiście atrybuty zawsze private! (myslę że to tylko dla przykładu było)

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