jak obsługiwać obiekty w ArrayList()

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.

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

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;

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

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ę

0

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

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?

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

dzieki. głupi 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);
}

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)

0

no niestety, ciezko sie przestawic w ciagu 2 dni z C++ na jave, a projekt napisac trzeba... XD
z tym ze dane powinny byc private, to wiadomo. kwestia tego ze potem gettery i settery trzeba pisac, a w przypadku proby ogarniecia po prostu jezyka jest to zbedne ;]

ps. ten ostatni wrzucony programik --> jak bede duzy tez tak bede pisal ;]

0

a jak zmodyfikowac dana wartosc np. w1 w klasie na liscie ?

0

Sprecyzuj.

0
	 ArrayList<String> ass = new ArrayList<String>();
	public void lol()
	{
		//dodaje element
		ass.add("lol");
		//zmienia po indeksie
		ass.set(0, "loldrugi");
                //pobiera po indeksie zawartość.
                ass.get(0);
		//usuwa po indeksie
		ass.remove(0);
		//czysci wszystko
		ass.clear();
               
		
	}

Tutaj znajdziesz odpowiedź na wszystkie swoje pytania:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html

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