2017-03-21 1 views
0

Ich möchte den Abstand zwischen zwei Koordinaten berechnen, die in einer CVS-Datei gespeichert sind. In CVS-Dateien sind zwei Spalten für X- und Y-Koordinaten angegeben.Ich bekomme nicht die tatsächliche Entfernung als Ausgabe von CVS-Datei

Ich möchte Euklidische Distanzformel zwischen diesen gespeicherten Punkten anwenden und das Ergebnis auf der Konsole ausdrucken. Für denselben habe ich den Punkt der CVS-Datei als ein Array abgerufen, dieses Array auf der Konsole gedruckt und die Entfernungsformel angewendet, und danach möchte ich sie in aufsteigender Reihenfolge sortieren und diejenige mit minimalem Abstand für ein weiteres Problem auswählen.

Aber mein Problem ist, dass die Entfernung nicht auf der Konsole angezeigt wird. Der Code wird unten erwähnt:

import java.util.*; 
import java.io.*; 

public class distance { 

    public void euclidianDistanceFromFile(String path) throws IOException { 
     BufferedReader br = new BufferedReader(new FileReader(path)); 
     String line = br.readLine(); // for ignoring the header of file 
     int row = 0; 
     int col = 0; 
     double dist; 
     String[][] numbers = new String[8][2]; 
     double Cordx[] = new double[8]; 
     double Cordy[] = new double[2]; 
     while ((line = br.readLine()) != null && row < 8) { 
      StringTokenizer st = new StringTokenizer(line, ","); 
      while (st.hasMoreTokens()) { 
       // get next token and store it in the array 
       numbers[row][col] = st.nextToken(); 
       col++; 
      } 
      col = 0; 
      row++; 
     } 
     for (row = 0; row < 8; row++) { 
      for (col = 0; col < 2; col++) { 
       System.out.print(" " + numbers[row][col]); 
      } 
      System.out.println(" "); 
     } 
     for (row = 0; row < 8; row++) { 
      for (col = 0; col < 2; col++) { 
       Cordx[row] = Double.parseDouble(numbers[row][col]); 
       Cordy[col] = Double.parseDouble(numbers[row][col]); 
      } 
     } 
     for (int i = 0; i < Cordx.length; i++) { 
      dist = 0; 
      for (int j = 0; j < Cordy.length; j++) { 
       double diffx = Cordx[i + 1] - Cordx[i]; 
       double diffy = Cordy[j + 1] - Cordy[j]; 
       dist = dist + Math.sqrt(Math.pow(diffx, 2) + Math.pow(diffy, 2)); 
      } 
      System.out.println("distance is" + "" + dist); 
     } 
    } 

    public static void main(String[] argv) throws IOException { 
     try { 
      distance dist = new distance(); 
      dist.euclidianDistanceFromFile("src\\ploting\\ravm.csv"); 
      // ravm is the cvs file from which i retrieve the points and calculate the distance. 
     } catch (Exception e) { 
      e.getMessage(); 
     } 
    } 
} 
+0

'Doppel Diffy = Cordy [j + 1] -Cordy [j]' => Sie außerhalb Ihres Array lesen, wenn j = 1 (gleiche für 'Cordx') – Fefux

Antwort

0

Zu allererst e.getMessage()-e.printStackTrace() ändern, und Sie werden in der Lage sein, zu sehen, dass ein ArrayIndexOutOfBoundsException passiert (Sie versuchen, eine nicht vorhandene Position in einigen Array zuzugreifen).

Der Fehler ist in dieser Schleife:

for (int i = 0; i < Cordx.length; i++) { 
     dist = 0; 
     for (int j = 0; j < Cordy.length; j++) { 
      double diffx = Cordx[i + 1] - Cordx[i]; 
      double diffy = Cordy[j + 1] - Cordy[j]; 

Beachten Sie, dass, wenn i ist Cordx.length - 1 gleich (auch bekannt als „die letzte Position“), können Sie versuchen Cordx[i + 1] (eine Position nach dem letzten) zuzugreifen, wodurch der Fehler. Versuchen Sie, die Schleifen auf diese Weise zu tun:

for (int i = 0; i < Cordx.length - 1; i++) { 
     dist = 0; 
     for (int j = 0; j < Cordy.length - 1; j++) { 
Verwandte Themen