NullPointerException beim Array

Lilac

Mitglied
Hallo!
Ich versuche seit Tagen einen Fehler zu beseitigen. Können Sie bitte mal checken, worin er liegt (N ist schon vorher definiert)?
Java:
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!
 
Zuletzt bearbeitet von einem Moderator:

Baldur

Aktives Mitglied
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

Mitglied
Hier tritt die Exception auf:
Java:
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());
 
Zuletzt bearbeitet von einem Moderator:

Baldur

Aktives Mitglied
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.
 
X

Xyz1

Gast
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ß)
 

Neue Themen


Oben