Pełna (?) tablica zwraca null

0

Witam, zacznę od kodu:

public class Data {
	
	private int numberOfVertices;
	private int vertexIndex;
	
	private Vertex [] arrayOfVertices;

	public void setArraySize() {
		arrayOfVertices =  new Vertex [numberOfVertices];
	}
	
	public void addVertex(int index, double x, double y, double z) {
		this.arrayOfVertices[vertexIndex] = new Vertex(index, x, y, z);
		//System.out.println(arrayOfVertices[vertexIndex]); - wypisuje mi poprawnie wszystkie elementy tablicy
		this.vertexIndex++;
	}

	public void test() {
		System.out.println(arrayOfVertices[0]); //przykładowa funkcja - wypisuje mi null
		System.out.println(arrayOfVertices.length); // -zwraca prawidłową wartość
	}

Nie mam pojęcia dlaczego tak się dzieję, odwołanie się do dowolnego elementu tablicy daje wynik null, oczywiście funkcję wywołuję po zapełnieniu już tablicy. Natomiast sprawdzanie długości tej tablicy zwraca poprawny wynik. Więc na moje powinno być ok, a nie jest ;/ Proszę o podpowiedź, gdzie robię błąd albo gdzie moje rozumowanie jest błędne.

0

Pokaż więcej kodu.

        public void setArraySize() {
                arrayOfVertices =  new Vertex [numberOfVertices]; //tu tworzysz tablicę o długości zero
        }
 
        public void addVertex(int index, double x, double y, double z) {
                this.arrayOfVertices[vertexIndex] = new Vertex(index, x, y, z);
                //System.out.println(arrayOfVertices[vertexIndex]); - wypisuje mi poprawnie wszystkie elementy tablicy
                this.vertexIndex++;
                // już drugie wywołanie spowoduje przekroczenie zakresu tablicy
        }

Ten sie raczej kupy nie trzyma.

0

Ehh, nie podawałem wszystkiego, bo wydaje mi się, że reszta jest dobrze. W funkcji setArraySize() nie tworze tablicy równej zero, bo gdzieś indziej w kodzie robię coś takiego:

data.setNumberOfVertices(x);					
data.setArraySize();

Oczywiście mógłbym zrobić coś takiego setArraySize(int size) - co by było bardziej czytelniejsze. W każdym razie nie w tym tkwi błąd.

Co do dalszej uwagi, skoro w funkcji addVert() zaznaczyłem, że wypisuje mi całą tablicę, to nie ma mowy o żadnym przekroczeniu tablicy.

0

Niestety, to ta reszta jest źle, bo tu (prawdopodobnie, to zależy od reszty) nie ma błędu. Tablice same się nie czyszczą, zdebuguj kod od wywołań addVertex do metody test.

0

Dobra zamieszczę trochę więcej kodu, w którym wywołuję metodę addVertex():

public void readFile() {
	while( (line = in.readLine() ) != null ) {
					
		verticesMatcher = vertices.matcher(line);
					
		if ( verticesMatcher.matches() ) {
			index = Integer.parseInt( verticesMatcher.group(1) );
			x = Double.parseDouble( verticesMatcher.group(2) );
			y = Double.parseDouble( verticesMatcher.group(3) );
			z = Double.parseDouble( verticesMatcher.group(4) );
			System.out.print(index + " " + x + " " + y + " " + z ); // poprawnie wypisuje mi wszystkie wartości					
			data.addVertex( index, x, y, z );
	}
}

Po zdebugowaniu, mam takie wnioski. Wszystko jest ok, do momentu utworzenia tablicy. Jednak gdy wywołuję funkcję addVertex(), nowododany element tablicy jest wypisywany, ale po zakończeniu tej metody, w tablicy jest jednak null. Tak jakby przy każdym następnym wywołaniu addVertex() czyszczona była tablica. "Na stałe" dodawany jest tylko ostatni element.

PS. To ja wcześniej pisałem pod nickiem pit, zapominałem, że jestem tu zarejestrowany.


Już znalazłem błąd musiałem przeczytać to co napisałem, żeby to sobie uświadomić ;] W pętli while za każdym razem wywoływałem również metodę setArraySize() (nie pokazałem tego na forum, więc moglibyśmy się nad tym dalej głowić) i tworzyłem cały czas nową tablicę o takim samym rozmiarze.

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