Ich habe eine Hausaufgabe, und ich bin völlig fest (Level: Anfänger).So finden Sie 3 nächstgelegene Koordinaten von einem Punkt in einem Array Java
Ich muss eine Methode erstellen, die 3 nächstgelegene Entfernungen von einem Benutzereintrag und alle Punkte in einem Array findet - und ich stecke hier fest.
Die Methode ist: public static int [] troisPlusProches (int x, int y, int [] coordonneesHabitations) wo int x und int y Benutzereinträge sind, und das Array int [] coordonneesHabitations ist int [] coordonneesHabitations = {9, 30, 18, 8, 3, 18, 25, 36}. Also sind die Punkte (9,30), (18,8), (3,18) und (25,36).
Ich habe die Formel verwendet: Abstand = Math.sqrt (((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2))), um die Abstände zu berechnen.
Und jetzt muss ich 3 kürzeste Entfernungen von einem Benutzer Einträge finden und ihre Positionen in einem neuen Array zurückgeben.
Wenn also die Benutzereinträge x = 10, y = 15 sind.
Die kürzeste Entfernung ist 7.616 von einem Punkt (3, 18), die nächste ist 10.630 von einem Punkt (18, 8), und die dritte ist 15.033 von einem Punkt (9, 30). In diesem Fall sollte die Methode ein Array int [] troisPlusProches = {3, 18, 18, 8, 9, 30} zurückgeben.
Ich weiß, was ich zu tun habe, kann ich einfach nicht herausfinden, wie ...
Hier ist eine der vielen Fehlversuchen:
public static int[] troisPlusProches (int x, int y, int[] (coordonneesHabitations)
{
int [] that = Arrays.copyOf(coordonneesHabitations, coordonneesHabitations.length);
int table[] = new int[6];
double distanceA = 0.0;
double minDistance = Float.MAX_VALUE;
int a = 0;
int b = 0;
int i = 0;
double ignore = Float.MAX_VALUE;
double ignore2 = Float.MAX_VALUE;
for (i = 0; i < that.length; i += 2) {
a = that[i];
b = that[i+1];
distanceA = calculerDistance(a, b, x, y);
if (distanceA < minDistance) {
minDistance = distanceA;
table[0] = a;
table[1] = b;
}
}
ignore = minDistance;
for (i = 0; i < that.length; i += 2) {
a = that[i];
b = that[i+1];
distanceA = calculerDistance(a, b, x, y);
if (distanceA == ignore) {
continue;
}
if (distanceA < minDistance) {
minDistance = distanceA;
table[2] = a;
table[3] = b;
}
}
ignore2 = minDistance;
for (i = 0; i < that.length; i += 2) {
a = that[i];
b = that[i+1];
distanceA = calculerDistance(a, b, x, y);
if ((distanceA == ignore) || (distanceA == ignore2)) {
continue;
}
if (distanceA < minDistance) {
minDistance = distanceA;
table[2] = a;
table[3] = b;
}
}
return table;
}
Im Hinblick auf diese Aufgabe: Meine dritte Aufgabe ist es, ein Verfahren zu schaffen, und 3 am nächsten Abständen von einem Benutzereintrag und alle Punkte finden in einem Array - und ich stecke jetzt seit 2 Tagen hier fest. Angesichts dieser Hausaufgabe ist ein guter Ratschlag, es rohe Gewalt zu codieren und später zu optimieren. Also bei einem Benutzereintrag die Entfernung zu jedem anderen Punkt finden und dann sortieren und die 3 kleinsten nehmen. – mba12
Ich poste, was ich in der nächsten Antwort getan habe, es ist ziemlich genau das, was ich die ganze Zeit gemacht habe. Aber ich bekomme die Ergebnisse für die 2. und 3. Distanz nicht. Ich habe versucht, es in eine Schleife zu bringen, ich habe 3 separate Schleifen ausprobiert (wie im Beispiel unten).Ich habe versucht, innerhalb einer Schleife zu loopen ... Aber immer noch keine Ergebnisse; ( – Frenchie
) Sie müssen 'minDistance' auf' Float.MAX_VALUE' zurücksetzen, bevor Sie nach dem zweiten und dritten Punkt suchen. Sonst wird es nie etwas finden, weil alle Punkte sind größere Entfernung als die alte Min. – nhouser9