Abstand zwischen zwei Objekten berechnen, bei dem ich den Inhalt nicht kenne, wie soll das gehen (Java)?

4 Antworten

Ich probiere Dir einmal mit den Infos, welche ich aus den anderen Kommentaren erhalten habe, zu helfen.

Wir gehen zunächst einmal davon aus, dass Du eine Klasse basteln sollst, die einen x- und y-Wert enthält. Ich nenne diese Klasse "MyPoint":

public class MyPoint {
    private double x, y;

    public MyPoint(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public double[] getCoordinates() {
        return new double[] {x, y};
    }
}

Nun erstelle ich in der Main-Methode beispielhaft einiger dieser "MyPoints" in einem Array "myArray":

final MyPoint[] myArray = new MyPoint[] {
        new MyPoint(0,0),
        new MyPoint(1,3),
        new MyPoint(2,-3),
        new MyPoint(-5,5)
};

Um nun den Abstand zweier dieser Punkte zu ermitteln, benutzen wir die Formel:

Math.sqrt(Math.pow((x2 - x1, 2)) + Math.pow(y2 - y1, 2))

Jetzt muss nur noch eine Schleife geschrieben werden, welche alle Punkte in "myArray" miteinander mithilfe der obigen Formel vergleicht:

for (int i = 0; i < myArray.length; ++i) {
    for (int j = i+1; j < myArray.length; ++j) {
        final double p1[] = myArray[i].getCoordinates();
        final double p2[] = myArray[j].getCoordinates();

        final double distance = Math.sqrt(Math.pow(p2[0] - p1[0], 2) + Math.pow(p2[1] - p1[1], 2));

        System.out.println("Der Abstand zwischen dem " + (i + 1) + ". Objekt und dem " + (j + 1) + ". Objekt beträgt: " + distance);
    }
}

Der Output in der Konsole sieht wie folgt aus:

Der Abstand zwischen dem 1. Objekt und dem 2. Objekt beträgt: 3.1622776601683795
Der Abstand zwischen dem 1. Objekt und dem 3. Objekt beträgt: 3.605551275463989
Der Abstand zwischen dem 1. Objekt und dem 4. Objekt beträgt: 7.0710678118654755
Der Abstand zwischen dem 2. Objekt und dem 3. Objekt beträgt: 6.082762530298219
Der Abstand zwischen dem 2. Objekt und dem 4. Objekt beträgt: 6.324555320336759
Der Abstand zwischen dem 3. Objekt und dem 4. Objekt beträgt: 10.63014581273465

Process finished with exit code 0

Grüße, Jacob

Wenn du wirklich die Differenz ermitteln sollst, dann könntest du noch ein Type casting probieren:

int temp = Integer.parseInt(array[i]);

Allerdings klingt "Abstände" für mich eher so, als solltest du den Abstand innerhalb des Arrays berechnen.

Also dass man quasi die beiden Elemente angibt, die gesucht sind und man dann eine Schleife laufen lässt, wobei man "links" (i=0) und "rechts" (array.length - 1 - i) dann zeitgleich abklappert, ob es sich um eins der gesuchten Elemente handelt.

if (array[i] == element1)
	x = array[i];
} else if(array[i] == element2) {
	y = array[i]
}

Ansonsten wüsste ich auch nicht, was gemeint ist.

oijoiqwdj92 
Fragesteller
 13.11.2021, 21:11

Ne ne ich muss schon den Abstand des Inhalts berechnen :(

0
GuteAntwort2021  13.11.2021, 21:25
@oijoiqwdj92

Möglich, aber beide bisherige Antworten zu deiner Frage verstehen die Aufgabe so, als müsstest du den Abstand innerhalb des Arrays ermitteln und nicht die Differenz der vermeintlichen Werte.

Hängt aber natürlich auch davon ab, welche Themen ihr gerade im Unterricht / den Vorlesungen so durchgenommen habt.

Wenn es um Type Casting geht, dann könntest du schon recht haben. Wenn du noch nichts von Type Casting gehört hast oder schon länger nichts damit gemacht wurde, dürfte es wohl mehr um das Arbeiten mit Objekten und Objekt-Arrays gehen.

Ansonsten kannst du auch noch versuchen:

System.out.println(String.valueOf(array[0]));

oder

System.out.println(array[0].toString());

und gucken was auf der Console erscheint. Wenn es einen Error gibt, kann unmöglich der Abstand von Werten gemeint sein, denn jede Zahl sollte sich als String darstellen lassen.

0
oijoiqwdj92 
Fragesteller
 13.11.2021, 21:28
@GuteAntwort2021

Okay danke dir, aber wie berechne ich dann den Abstand, wenn ich String.valueOf mache? kann ich dann String.valueOf(array[0]-String.valueOf(array[1]) machen?

0
GuteAntwort2021  13.11.2021, 21:32
@oijoiqwdj92

Nein, es geht mehr darum zu gucken, was drin steht um zu wissen, auf welchen Datentyp man casten muss. Sofern es denn Zahlen sind...

Und sollte es wirklich um Differenzen gehen, müsstest du die absolute Distanz ermitteln (Math.abs(...)).

1
oijoiqwdj92 
Fragesteller
 13.11.2021, 21:44
@GuteAntwort2021

Also to string geht schon, die sache ist, dass das Objekt von einer anderen Klasse Sachen erhält, die ich erst bauen muss, nachdem ich diese Methode gebaut habe. Aber mit toString kommt keine Fehlermeldung mehr zumindest.

0

Du musst mit einem Zähler das Array durchlaufen.

Du könntest das Array endlos durchlaufen und sobald der erste gesuchte Inhalt gefunden wurde zählst Du hoch und unterbrichst den Durchlauf wenn der zweite Wert gefunden wurde.

Allerdings halte ich das für einen schlechten Programmierstil wenn es keine Bedingung gibt, die den Durchlauf nach spätestens 2 Durchläufen stoppt.

Von was möchtest du den Abstand wissen?

Wenn du den Abstand der Objekte in einem Array wissen willst benötigst du die zwei Indexe der Objekte. Du kannst das Array einfach in einer Schleife durchsuchen und dann einen Zähler mitlaufen lassen. Ungefähr so könnte das aussehen.

Object[] array = new Object[];

//Array fühlen

int abstand = 0;

boolean startCounter = false;

for(int i = 0; i < array.lenght(); i++) {

if(array[i] == gewünschtes erstes Element) {

startCounter = true;

}

if(startCounter) { abstand++}

if(array[i] == gewünschtes zweites Element) {

break;

}

System.out.println(abstand);