Tablica dwuwymiarowa problem

0

Stworzyć kolekcję ListaNaTablicy2D, która będzie pamiętała listę obiektów klasy Object w
tablicy dwuwymiarowej. W konstruktorze podawane są wielkości tych dwóch wymiarów (liczbę
wierszy, liczbę kolumn). Dla uproszczenia załóżmy, że do tablicy można tylko dodawać elementy bez
podania miejsca, co powoduje dodanie obiektu na koniec kolekcji. Jeśli zakładamy, że mamy n wierszy
i m kolumn, to elementy będą dodawane na miejsca w kolejności (0,0), (0,1), (0,2), …,
(0,m-1),(1,0),(1,1),(1,2),…,(1,m-1),(2,0),…,(n-1,0),(n-1,1),…,(n-1,m-
1). Kolekcja ta powinna udostępniać Iterator do przeglądania jej elementów (co najmniej
jednokierunkowy, dla chętnych – dwukierunkowy). Iterator powinien przesuwać się po elementach
wg wcześniej opisanego porządku. Iterator ten powinien uniemożliwiać dodawanie elementów (dla
chętnych – umożliwia dodawanie elementu) wyrzucając odpowiedni wyjątek. Interfejs Iterator ma
być wzięty z biblioteki Javy, co spowoduje, że poprawnie wykonane zadanie pozwoli np. na wykonanie
poniższej postaci pętli:

ListaNaTablicy2D lista=New ListaNaTablicy2D(5,6);
lista.add(new Integer(15));
// … dodawanie elementów
for(Object obj:lista)

oto moją klasa ListaNaTablicy2D:

public class ListaNaTablicy2D implements Collection<Object>
{
	
	Object[][] tablicaDanych;
	int rozmiarX = 0;
	int rozmiarY = 0;
	
	int licznikX = 0;
	int licznikY = 0;
	
	ListaNaTablicy2D(int x, int y)
	{
		tablicaDanych = new Object[x][y];
		rozmiarX = x;
		rozmiarY = y;
	}

	
	public boolean add(Object obj)
	{
		
		tablicaDanych[licznikX][licznikY] = obj;
		licznikX++;
		if(licznikX>(rozmiarX-1)) {
			licznikY++;
			licznikX=0;
		}
		
		
		
		return false;
		
	}...

A to jest moja klasa testowa:

public class KlasaTestujaca {
  
	public static void main(String[] args) {
		
	

	  ListaNaTablicy2D lista = new ListaNaTablicy2D(10,10);
	  
	 
	 
	 
	  
	 lista.add(new Integer(1));
	 
	 lista.add(new Integer(2));
	 
	 lista.add(new Integer(3));
	 
	 lista.add(new Integer(4));
	 lista.add(new Integer(5));
	 lista.add(new Integer(6));
	 lista.add(new Integer(7));
	 lista.add(new Integer(8));
	 lista.add(new Integer(9));
	 lista.add(new Integer(10));
	 lista.add(new Integer(11));
	 lista.add(new Integer(12));
	 lista.add(new Integer(13));
	 
	 
	 
	 for (Object obj: lista)
		 System.out.println(obj);
	  
	  
 
	 
		
	  
	
  }
}

przy każdym wywołaniu wyrzuca mi wyjątek NullPointerException dla tej pętli for each :( Nie wiem o co chodzi, macie jakąś wizje?

0

Mamy. Tworzysz tablicę tak:

tablicaDanych = new Object[10][10];

ta tablica zawiera 10*10 nulli, potem na 13 pozycjach wpisujesz do tablicy obiekty typu Integer, a potem iterujesz po całej 100-elementowej tablicy. Nic dziwnego,że trafiasz na nulle.
P.S. O pętlach słyszałęś?

          for(int i=1;i<=13;i++)
              lista.add(new Integer(i));
0

OK.

Ale jak zrobić, żeby wyświetlić te 13 elementów, które sobie dodałem? Ta pętla for each nie działa i nie rozumiem dlaczego :(

0

Może i mnie zjedziecie ale nie łatwiej dopisać jedną linijkę z if :P :

     for (Object obj: lista)
     {
        if(obj != null) System.out.println(obj);
     }

Uprzedzam jestem noobem i dopiero zabawę z javą zaczynam ^^

0

To nie przejdzie :(

0

@up, Twoje rozwiązanie nie spełnia warunków zadania.
@autor, musisz zaimplementować swój Iterator, metoda next() skacze do najbliższego elementu w tablicy, który nie jest nulem, metoda hasNext() sprawdza czy taki element istnieje.

0
import java.util.Iterator;



public class iterator implements Iterator<Object>
{

	
	public boolean hasNext() {
		
		return false;
	}

	
	public Object next() {
		
		return null;
	}

	
	public void remove() {
		
		
	}
	
}

Stworzyłem sobie klasę iterator. Jak teraz w klasie testującej to wszystko ustawić?

0

Jaja sobie robisz? Metoda hasNext() zawsze zwraca false, a Ty chcesz iteratorem przejrzeć kolekcję?

0

Nie robie sobie jaj. Nie wiem po prostu jak to wszystko w jedna całość powiązać. Jakbyś mi mógł napisać co źle zrobiłem będę wdzięczny.

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