# NullPointerException beim Array



## Lilac (13. Mrz 2016)

Hallo!
Ich versuche seit Tagen einen Fehler zu beseitigen. Können Sie bitte mal checken, worin er liegt (N ist schon vorher definiert)?

```
double [][] edges3 = new double[N][N];
  for(int x=0;x<N;x++)for(int y=0;y<N;y++) edges3[x][y]=0.0;
Scanner s3 = new Scanner(new FileReader(args[1]));
  Scanner s4 = new Scanner(new FileReader(args[0]));
  String z3 = s3.nextLine();
  String z4 = s4.nextLine();
  HashMap<Integer, Pair<Double, Double>> hmm = new HashMap<Integer, Pair<Double, Double>>();
  int id = 0;
  double lon = 0.0;
  double lat = 0.0;
  String[] arr3 = new String[N];
while(s4.hasNext()) {
  z4 = s4.nextLine(); arr3 = z4.split(",");
  id = Integer.parseInt(arr3[0]); lat = Double.parseDouble(arr3[1]); lon = Double.parseDouble(arr3[2]);
  hmm.put(id, Pair.of(lat,lon)); }
  while(s3.hasNext()) {
  z3 = s3.nextLine();
  String[] resultss3 = z3.split(",");
  edges3[Integer.parseInt(resultss3[0])][Integer.parseInt(resultss3[1])] = realDistance(hmm.get(resultss3[0]).getLeft(),hmm.get(resultss3[0]).getRight(),hmm.get(resultss3[1]).getLeft(),hmm.get(resultss3[1]).getRight()); }
```

Vielen Dank!


----------



## Baldur (13. Mrz 2016)

Wo genau tritt die NullpointerException denn auf?
Hast du schonmal versucht mit einem Debugger nachzuvollziehen was passiert, in dem Moment als die Exception auftritt?


----------



## Lilac (13. Mrz 2016)

Hier tritt die Exception auf:

```
edges3[Integer.parseInt(resultss3[0])][Integer.parseInt(resultss3[1])] = realDistance(hmm.get(resultss3[0]).getLeft(),hmm.get(resultss3[0]).getRight(),hmm.get(resultss3[1]).getLeft(),hmm.get(resultss3[1]).getRight());
```


----------



## Baldur (13. Mrz 2016)

Nichts für ungut, aber der Code ist wirklich extrem schwer lesbar.
Das erste Problem ist, daß du etwas aus Dateien liest, bei denen man nicht weiß was drin steht oder in welchem Format die sein sollen. Deine Variablennamen sind auch sehr schlecht gewählt und erlauben kaum Rückschlüsse darauf, wozu die gut sind. Wenn du deinen eigenen Code in einem Jahr nochmal anschaust, wirst du selbst Probleme haben das alles nochmal nachzuvollziehen.

In der Zeile passiert sehr viel das eine NPE werfen kann. HashMap.get kann dir ein null-Objekt zurückgeben, womit getLeft, bzw getRight die NPE werfen können. So viel Zeug in einer Zeile zu machen ist selten eine gute Idee. Wenn du die Zeile in Einzelschritte aufteilst, hilft das nicht nur den Fehler zu finden, sondern erhöht generell auch die Lesbarkeit. Da du das alles aus Dateien liest, kann der Fehler durch fehlerhafte oder falsch formatierte Daten ausgelöst werden.
Ich würde dir raten, den Code einfach mal zu überarbeiten, die Daten aus den Dateien in Variablen ablegen und zu prüfen ob die gelesenen Daten korrekt sind.


----------



## Flown (13. Mrz 2016)

Bitte das nächste mal Code in Code-Tags schreiben: [code=java]//JAVA CODE HERE[/code]


----------



## Xyz1 (13. Mrz 2016)

Die Konsistenz deiner Datenstruktur muss sichergestellt sein. Wie Baldur es geschrieben hat, ist das bei Dateien nicht der Fall.

Konkret kannst du das alles beheben, wenn du mal die Werte für
resultss3[0]
resultss3[1]
.getLeft() und
.getRight()

ausgibst/printest. Außerdem hätte ich die Map "straightforward" hmip genannt und N/n, da konstant, niemals N nennen, sondern n...

Warum?, alles dreht sich um den Lesefluss! (und Code Conventions und der ganze Spaß)


----------

