Pełna (?) tablica zwraca null

Pełna (?) tablica zwraca null
0

Witam, zacznę od kodu:

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

Kopiuj
        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:

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

bogdans
Pisząc, że kod się kupy nie trzyma miałem na myśli, to że zamieszczony kod nijak nie pasuje do podanych przez Ciebie objawów.
iooi
  • Rejestracja:prawie 15 lat
  • Ostatnio:ponad 11 lat
  • Postów:573
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.

edytowany 1x, ostatnio: iooi
F9
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 13 lat
0

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

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

edytowany 3x, ostatnio: frez991

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.