Tworzenie obiektów z pomocą hashmap a zagubione dane na liscie

0

Cześć wszystkim. Piszę program obliczający odległość między punktami i nie wychodzi mi tworzenie obiektów z dynamicznie przydzielaną nazwą. ( o ile w ogóle takie podejście ma sens- jeśli nie to proszę o naprostowanie mojego toku myślenia). Otóż nazwa nadawana jest przez hashmape (znalazłem takie rozwiązanie w sieci) i kombinuję dalej. Wywala błąd w 47 linii, java.lang.NullPointerException. Domyślam się że chodzi o pustą komórkę w liście natomiast nie potrafię znaleźć rozwiązania takiego aby nie wywaliło błędu gdzie indziej. Stąd moja prośba o obejrzenie kodu i nakierowanie na ewentualny błąd w kodzie. Oto kod:

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

public class kdim {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String data = br.readLine();
		int howdims, howtest, sumlist = 0;
		Scanner skaner = new Scanner(data);
		howdims = skaner.nextInt();
		howtest = skaner.nextInt();
		skaner.close();
		point obiekt = null;
		point obiekt2 = null;
		HashMap<String, point> hashmapa = new HashMap<String, point>();
		List<Integer> wyniki = new ArrayList<Integer>();
		if (howdims <= 1000 & howtest <= 100) { // sprawdza ilosc wymiarów i
												// testów
			for (int i = 0; i < howtest; i++) {
				String lineofcord = br.readLine();
				String coords[] = new String[howtest]; // tworzy tablice do
														// kordów o rozmiarze
														// iletestów
				Scanner scancords = new Scanner(lineofcord); // tworzy skaner
																// lini z
																// kordami
				coords[i] = scancords.nextLine(); // przekazuje stringi lini do
													// tablicy
				scancords.close(); // zamyka skaner
				point temp = new point(coords[i]);
				hashmapa.put("point_" + i, temp);

			}
			for (int k = 0; k < howdims; k++) {

				for (int j = 0; j < howtest; j++) {
					obiekt = hashmapa.get("point_" + j);
					obiekt2 = hashmapa.get("point_" + j + 1);
					int x = obiekt.coord.get(k);
					int y = obiekt2.coord.get(k);                     // tutaj wywala błąd
					double wynik = Math.pow(x - y, 2);
					wyniki.add((int) wynik);
				}
				for (int x = 0; x < wyniki.size(); x++) {
					sumlist = +wyniki.get(x);
				}
				int pierw = (int) Math.sqrt(sumlist);
				System.out.println(pierw);
			}
		}
	}
}


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class point {

	public List<Integer> coord = new ArrayList<Integer>(); // tworzy liste do
															// kordów
	String coords;

	point(String x) { 
		coords = x; // string przekazany jest do skanera, dzielony i parsowano
					// do typu int
		Scanner skaner = new Scanner(coords);
		// while (skaner.hasNextInt()) {
		coord.add(skaner.nextInt());
		skaner.close(); 
		// }
	}
}

Pozdrawiam i liczę na wskazówki

0

Co chcesz uzyskać tutaj

"point_" + j + 1

gdy j = 5? Przypuszczam, że chodzi Ci o "point_6", a uzyskasz "point_51". Dopisz nawiasy.

0

Zacznij używać pętli foreach lub z iteratora. Poza tym postaraj się napisać kod czytelniej, ponieważ trudno się go analizuje.

0
bakeraw2 napisał(a):

Zacznij używać pętli foreach lub z iteratora. Poza tym postaraj się napisać kod czytelniej, ponieważ trudno się go analizuje.

dzięki za wskazówkę, zabieram się za edycję kodu,

bogdans napisał(a):

Co chcesz uzyskać tutaj

"point_" + j + 1

gdy j = 5? Przypuszczam, że chodzi Ci o "point_6", a uzyskasz "point_51". Dopisz nawiasy.

tak dokładnie to chciałem uzyskać, widzę że podejście błędne, postaram się to zmienić

0

powiedzcie mi czy moje podejście do problemu jest w ogóle prawidłowe? czy robię może "na około" ?

0

Podejście jest poprawne, wystarczy dopisać nawiasy

obiekt2 = hashmapa.get("point_" + (j + 1));
0
bogdans napisał(a):

Podejście jest poprawne, wystarczy dopisać nawiasy

obiekt2 = hashmapa.get("point_" + (j + 1));

poprawiłem, ale mimo zmiany wyskakuje ten sam błąd

jako dane testowe podaje:
3 2
3 3 3
2 2 2

0

Klasa point jest błędna, brakuje pętli

    Scanner skaner = new Scanner(coords);
    while (skaner.hasNextInt()) 
    {
        coord.add(skaner.nextInt());
    }

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