Array problem

Diskutiere Array problem im Java Basics - Anfänger-Themen Bereich.
A

arhzz

Hallo!

Ich habe ein Problem mit meinem Program wieder haha. Nämlich muss ich Koordinaten aus einem txt einlesen und die größte Distanz auf der Konsole ausgeben, und fur die Berechnung der Distanz muss ich eine Funktion verwenden,Das problem ist jetzt das die Funktion 4 Argumente hat, und jede Zeile in diesem txt file hat 2 Argumente bzw. Koordinaten (x und y). Ich habe die Funktion auf Google und mit meinem Professor überprüft und sie stimmt aber jetz weiss ich nicht wie ich die verwenden soll weil mir 2 Argumente "fehlen".

Java:
public class gps {
public static double calculateDistance(double latitude1, double longitude1,
            double latitude2, double longitude2) {
        double deltaLatitude = Math.toRadians(latitude2 - latitude1);
        double deltaLongitude = Math.toRadians(longitude2 - longitude1);

        double a = Math.sin(deltaLatitude / 2) * Math.sin(deltaLatitude / 2)
                + Math.cos(Math.toRadians(latitude1))
                * Math.cos(Math.toRadians(latitude2))
                * Math.sin(deltaLongitude / 2)
                * Math.sin(deltaLongitude / 2);

        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        return 6371000 * c;
    }   
In.open("coordinates.txt");
        String [] zeilen = new String [30];
        String line;
        int i = 0;
        while(i < zeilen.length && (line =In.readLine ()) != null){
            zeilen[i] = line;
            Out.println(zeilen[i]);
            i++;
        }
        double [] x = new double [zeilen.length];
        double [] y = new double [zeilen.length];
        for( i = 0; i<zeilen.length; i++){
            String s = zeilen[i];
            String [] coords = s.split ("\\s+");
            String number1 = coords [0];
            String number2 = coords [1];
            
            x[i] = Double.parseDouble(number1);
            y[i] = Double.parseDouble(number2);

        }
        In.close ();
    }
}
Hier ist mein Program vielleicht hat jemand eine Idee.
LG
Alen
 
T

temi

Na, um eine Distanz zwischen zwei Punkten zu berechnen, brauchst du zwei Punkte. Ein Punkt hat jeweils Latitude und Longitude.
 
A

arhzz

Na, um eine Distanz zwischen zwei Punkten zu berechnen, brauchst du zwei Punkte. Ein Punkt hat jeweils Latitude und Longitude.
Okay,den Teil dass ich zwei Punkte brauche habe ich verstanden. Aber sind jetzt meine X und Y die Latitude und Longitude von Einem punkt,also brauche ich noch einen um die Funktion zu verwenden? Oder habe ich dass falsch verstanden
 
T

temi

Aber sind jetzt meine X und Y die Latitude und Longitude von Einem punkt,also brauche ich noch einen
Ich kenne deine Aufgabe nicht, aber ich interpretiere es so, dass du die kürzeste Distanz zwischen zwei deiner gegebenen Positionen suchen sollst, d.h. im einfachste Fall musst du die Distanzen zwischen Punkt 1 und 2, 3, 4, ... berechnen. Dann zwischen 2 und 3, 4, 5, ... usw. Die kürzeste gefundene Distanz, ist das gesuchte Ergebnis.
 
A

arhzz

Ich kenne deine Aufgabe nicht, aber ich interpretiere es so, dass du die kürzeste Distanz zwischen zwei deiner gegebenen Positionen suchen sollst, d.h. im einfachste Fall musst du die Distanzen zwischen Punkt 1 und 2, 3, 4, ... berechnen. Dann zwischen 2 und 3, 4, 5, ... usw. Die kürzeste gefundene Distanz, ist das gesuchte Ergebnis.
Die größte Distanz, genau und jetzt weiss ich nicht wie ich diese Funktion verwenden soll weil ich, wie ich es verstanden soll nur die Latitude und Longitude von einem Punkt habe. Die Frage ist jetz wie bekomme ich die selben von dem zweiten punkt.
 
A

arhzz

Soweit ich mich erinnere, war dein letztes Problem, wie du Punkte aus einer Textdatei lesen kannst. Da hast du ja wohl jetzt genügend Punkte zur Verfügung...
Du erinnerst dich gut haha. Die Punkte sind schon da,dass weiss ich.Aber ich verstehe nicht wie ich sie aus diesem String bekomme.Wenn ich auf index 2 oder 3 greife bekomme ich einen "OutofBound" error und er passiert weil es nur 2 Koordinaten pro Zeile sind.
 
A

arhzz

Du hast sie doch in ein Array eingelesen?
Ich denke dass ich das problem gelösen habe. Hier ist der Programm
Java:
public class gps {
public static double calculateDistance(double latitude1, double longitude1,
            double latitude2, double longitude2) {
        double deltaLatitude = Math.toRadians(latitude2 - latitude1);
        double deltaLongitude = Math.toRadians(longitude2 - longitude1);

        double a = Math.sin(deltaLatitude / 2) * Math.sin(deltaLatitude / 2)
                + Math.cos(Math.toRadians(latitude1))
                * Math.cos(Math.toRadians(latitude2))
                * Math.sin(deltaLongitude / 2)
                * Math.sin(deltaLongitude / 2);

        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        return 6371000 * c;
    }   
static final int size = 30;   
public static void main(String [] args){
In.open ("coordinates.txt");
double [] x = new double[size];
double [] y = new double[size];
for (int i = 0; i< size; i++){
     x[i] = In.readDouble ();
     y[i] = In.readDouble ();
}
In.close ();
double maxdistance = 0;
    for(int i = 0; i<size; i++){
        for (int j = 0; j<size; j++){           
        double distance =calculateDistance( x[i], y[i], x[j], y[j]);
        if(maxdistance < distance){
            maxdistance = distance;
        }
    }
    }
    Out.println("The biggest distance is: " + maxdistance);
}}
 
J

JustNobody

Ja, wobei du dir die Grenzen der beiden verschachtelten Schleifen noch einmal durch den Kopf gehen lassen solltest.

Denkanregung: Abstand von Punkt 2 zu Punkt 3 unterscheidet sich wie zum Abstand von Punkt 3 zu Punkt 2? Und was ist mit dem Abstand von Punkt 1 zu Punkt 1?
 
A

arhzz

Ja, wobei du dir die Grenzen der beiden verschachtelten Schleifen noch einmal durch den Kopf gehen lassen solltest.

Denkanregung: Abstand von Punkt 2 zu Punkt 3 unterscheidet sich wie zum Abstand von Punkt 3 zu Punkt 2? Und was ist mit dem Abstand von Punkt 1 zu Punkt 1?
Wenn ich dich gut verstanden habe, der Abstand von Punkt 2 zu Punkt 3 soll genau gleich sein wie der Punkt 3 zu Punkt 2. Wenn du das nicht gemeint hast dann sorry.
 
J

JustNobody

Ja genau. Wenn du also den Abstand von 2 zu 3 schon geprüft hast: Musst Du dann noch den Abstand von 3 zu 2 prüfen?

Und der Abstand zu sich selbst ist was? Und ab welcher Distanz berücksichtigst Du Abstände? Muss man den Abstand zu sich selbst berücksichtigen?

Und wie könnte man den Algorithmus dann mit diesen Erkenntnissen noch anpassen?
 
A

arhzz

Ja genau. Wenn du also den Abstand von 2 zu 3 schon geprüft hast: Musst Du dann noch den Abstand von 3 zu 2 prüfen?

Und der Abstand zu sich selbst ist was? Und ab welcher Distanz berücksichtigst Du Abstände? Muss man den Abstand zu sich selbst berücksichtigen?

Und wie könnte man den Algorithmus dann mit diesen Erkenntnissen noch anpassen?
Also noch einmal prüfen muss ich es nicht, also habe ich ein Schritt zu viel. Und ab welcher Distanz berücksichtige ich die Abstände? Es sollte eigentlich 0 sein weil is gesagt habe das max distance = 0 ist.?
 
J

JustNobody

Also du prüfst auf größer 0, daher musst du jeden Punkt nicht mit sich selbst vergleichen.

Wie kann man denn jetzt die Grenzen anpassen, damit da nicht unnötig viel geprüft wird?
 
A

arhzz

Also du prüfst auf größer 0, daher musst du jeden Punkt nicht mit sich selbst vergleichen.

Wie kann man denn jetzt die Grenzen anpassen, damit da nicht unnötig viel geprüft wird?
Ernst zu sein bin ich mir ganz sicher. Im Moment habe ich nicht gerade viel Zeit um mit dem Program zu spielen, aber später werde ich sicher versuchen es zu verbessern.
 
MoxxiManagarm

MoxxiManagarm

Ernst zu sein bin ich mir ganz sicher.
Das ist das Problem, dass oft nur die Standardvariante einer Schleife gezeigt wird. Sobald diese nicht zum Tragen kommt wissen viele Studenten nicht mehr weiter. Gemeint ist das, bitte versuche es zu verstehen:

Java:
    for(int i = 0; i < size - 1; i++){ // bis zum vorletzten Element
        for (int j = i + 1; j < size; j++){  // startet beim nächsten Element des aktuellen Elementes
Übrigens sind 2 Arrays für x und y auch unschön. Besser wäre es die Paare direkt abzubilden, mindestens in einem nx2-Array, besser aber in einem Array einer entsprechenden Klasse, welche lang und long kennt.
 
J

JustNobody

Wenn Ihr schon Sortieralgorithmen gehabt habt, dann kannst Du einmal schauen: Das ist auch das Vorgehen beim Bubblesort.

Das ist evtl. hilfreich für den Überblick falls Du so siehst, dass dieses "Pattern" auch an anderen Stellen angewendet wurde.
 
Thema: 

Array problem

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben