Array aus verschiedenen Datentypen

R

Rob_der_Orte

Gast
Hallöchen!
Ich habe folgendes Problem. Ich habe 2 Klassen. Klasse Route und Klasse Location.
In der Klasse Location werden, wie der Name schon sagt, Orte beschrieben. Und zwar mit x- und y- Koordinate, sowie dem Namen des Ortes.

Die Klasse Route soll (vorerst nur) die Orte aus Klasse Location in ein Array packen, damit ich anschließend mit diesem arbeiten kann.

Hier die Klassen:

class Location
Java:
class Location {                                  // new class named Location
  double xCoordinate;                             // declaration 
  double yCoordinate;
  String name;

  public void setX(double x) {
  xCoordinate = x; 
  }

  public void setY(double y) {
  yCoordinate = y; 
  }
    
 public void setName(String name_) {
  name = name_; 
  }
  
 public String getName() {
  return name;
  } 
  
 public double getX() {
  return xCoordinate;
  }
  
 public double getY() {
  return yCoordinate;
  }
}

class Route
Java:
public class Route {                               // new class named Route
   public int i;
  Location[] location2Route = new Location[10];{
   for (int i=0; i<location2Route.length; i++){
   location2Route[i] = new Location();   
   }
->PLATZHALTER
  }
}

Mein Problem ist, dass ich nun die 11 Orte, die ich in der class Route erzeugt habe, mit daten füttern möchte. Quasi das Array füllen. Doch jeder Versuch scheitert und mittlerweile bin ich so verwirrt, dass mir die einfachsten Dinge nicht mehr gelingen :(

Mein Versuch war:
Java:
->PLATZHALTER
location2Route[0] = 3.4,2.3,Deutschland;
location2Route[1] = 9.3,5.4,Schweiz;
...
Diesbezüglich sagt der Compiler:
"c:\javaN\Übung2>javac route.java

c:\javaN\Übung2>javac route.java
route.java:7: ';' expected
location2Route[1] = 9.3,5.4,Schweiz;
^
route.java:7: not a statement
location2Route[1] = 9.3,5.4,Schweiz;
^
2 errors"

ich bin ratlos :(
 

Michael...

Top Contributor
Location ist ein Objekt und keine Aneinanderreihung von Werten und ein solches wird bei der Zuweisung erwartet.
Definiere in der Klasse einen Konstruktor der als Paramenter die Koordinaten und den Namen übernehmen kann und erzeuge damit in der Klasse Route die jeweiligen Objekte.
 

Blindxantos

Aktives Mitglied
Java:
location2Route[0] = 3.4,2.3,Deutschland;
location2Route[1] = 9.3,5.4,Schweiz;

ohne den code richtig gelesen zu haben würde ich mal Deutschland und Schweiz in "" setzen. Sind ja Strings

Java:
location2Route[0] = 3.4,2.3,"Deutschland";
location2Route[1] = 9.3,5.4,"Schweiz";

falls es dann noch net geht müsst ich mich erstmal weiter einlesen :rtfm:
 
R

Rob_der_Orte

Gast
Danke für die schnelle Antwort!

Also folglich so hier:
Java:
Location(double x, double y, String name_){             // constructor 
    xCoordinate = x;
    yCoordinate = y;
    name = name_;        }
?
 

Michael...

Top Contributor
Ja, mittels dieses Konstruktors kann man dann mit den drei Werten ein Objekt erzeugen und in dem Array referenzieren.

Diese Unterstriche finde ich persönlich unschön. Um lokale Variablen von Instanzvariablen - trotz gleichem Namen - zu unterscheiden kann man
Code:
this
verwenden.
Java:
public Location(double x, double y, String name){             // constructor 
    xCoordinate = x;
    yCoordinate = y;
    this.name = name;
}
 
R

Rob_der_Orte

Gast
Vielen Dank nochmal, erstmal.

Das mit dem Constructor hatte ich bereits probiert.
Im Moment gibt er mir folgende Fehlermeldung:
c:\javaN\Übung2>javac route.java
route.java:7: ';' expected
location2Route[0] = 9.3,5.4,"Schweiz";
^
1 error


Hier der momentane Stand der Klassen:
Location
Java:
public class Location {                                  // new class named Location
  double xCoordinate;                             // declaration 
  double yCoordinate;
  String name;
  
  public Location(double x, double y, String name){             // constructor 
    xCoordinate = x;
    yCoordinate = y;
    this.name = name;
  }
}

Route
Java:
public class Route {                               // new class named Route
   public int i;
  Location[] location2Route = new Location[10];{
   for (int i=0; i<location2Route.length; i++){
   location2Route[i] = new Location();   
   }
   location2Route[0] = 9.3,5.4,"Schweiz";
  }
}

Nachwievor weiß ich nicht weiter. Wieso erwartet der Compiler ein Semikolon, wenn doch eigentlich noch 2 Werte folgen müssten?
 
R

Rob_der_Orte

Gast
Entschuldigt bitte den Doppelpost. Der Zeige raus der Compiler-Error-Meldung steht auf dem Komma nach 9.3.
 
R

Rob_der_Orte

Gast
Hallöchen nochmal. Danke für die hilfreichen Ratschläge!

Ich habe nun das Array befüllt und zu Testwecken mal ausgeben lassen:

Java:
public class Route {                               // new class named Route
  public int i;
  public static void main(String[] args) {
  Location[] location2Route = new Location[10];{   //array of 11 locations
  for (int i=0; i<location2Route.length; i++)      //for-loop to instantiate 10 locations in array above
    location2Route[0] = new Location(9.3f,5.4f,"Schweiz"); 
    location2Route[1] = new Location(3.2f,6.7f,"Deutschland"); 
    location2Route[2] = new Location(2.6f,3.1f,"Spanien"); 
    location2Route[3] = new Location(1.4f,5.4f,"Portugal"); 
    location2Route[4] = new Location(5.5f,2.9f,"Schweden"); 
    location2Route[5] = new Location(4.3f,5.1f,"Norwegen"); 
    location2Route[6] = new Location(6.8f,1.3f,"Mexiko"); 
    location2Route[7] = new Location(8.1f,1.6f,"China"); 
    location2Route[8] = new Location(7.3f,8.8f,"Japan"); 
    location2Route[9] = new Location(9.9f,9.4f,"Russland"); 
   
       for (int i = 0 ; i < location2Route.length ; i++)
       {
       System.out.print("location2Route[" + i + "] = "); 
       System.out.println(location2Route[i]);
       }
    }
  }  
}

Die Ausgabe funktioniert auch, mehr oder weniger:
c:\javaN\Übung2>javac route.java

c:\javaN\Übung2>java Route
location2Route[0] = Location@19821f
location2Route[1] = Location@addbf1
location2Route[2] = Location@42e816
location2Route[3] = Location@9304b1
location2Route[4] = Location@190d11
location2Route[5] = Location@a90653
location2Route[6] = Location@de6ced
location2Route[7] = Location@c17164
location2Route[8] = Location@1fb8ee3
location2Route[9] = Location@61de33

Wie kommt diese mysteriöse Ausgabe zustande? Ist das ein Link auf die Speicheradresse? Und wie bekomme ich die eingetragenen Werte als Ausgabe zu Gesicht?

Ich habe mich schon versucht zu belesen diesbezüglich. Allerdings scheint das der übliche Weg zu sein, Arrays auszugeben. Aber wo steckt dann der Fehler?
 
R

Rob_der_Orte

Gast
Ach ich Depp - hat sich erledigt. Ich muss natürlich mittels Methoden jeweils abrufen, was ich denn sehen möchte.
ZB:
Java:
       for (int i = 0 ; i < location2Route.length ; i++)
       {
       System.out.print("location2Route[" + i + "] = "); 
       System.out.println(location2Route[i].getN());
Ausgabe:

c:\javaN\Übung2>java Route
location2Route[0] = Schweiz
location2Route[1] = Deutschland
location2Route[2] = Spanien
location2Route[3] = Portugal
location2Route[4] = Schweden
location2Route[5] = Norwegen
location2Route[6] = Mexiko
location2Route[7] = China
location2Route[8] = Japan
location2Route[9] = Russland

Danke nochmals!
 

Marco13

Top Contributor
Alternativ:
Java:
public class Location {                                
...

    @Override
    public String toString()
    {
        return name+" at "+xCoordinate+"/"+yCoordinate;
    }
}

// Dann direkt
System.out.println(someLocation); // Gibt hübschen String aus
 
R

Rob_der_Orte

Gast
Ich muss mich nochmals zu Wort melden um eure Hilfe zu erbitten.
Java:
public class Route                                              //new class named Route
{
  public int i, shortestDistance;                               //declaration 
  public Location[] sortedPlaces = new Location[10];
  public double x1, x2, y1, y2, actualPlace;
  
  public static void main(String[] args) 
  {
  Location[] unsortedPlaces = new Location[10];                 //array of 11 locations
    {                
    unsortedPlaces[0] = new Location(9.3,5.4,"Schweiz    "); 
    unsortedPlaces[1] = new Location(3.2,6.7,"Deutschland"); 
    unsortedPlaces[2] = new Location(2.6,3.1,"Spanien    "); 
    unsortedPlaces[3] = new Location(1.4,5.4,"Portugal   "); 
    unsortedPlaces[4] = new Location(5.5,2.9,"Schweden   "); 
    unsortedPlaces[5] = new Location(4.3,5.1,"Norwegen   "); 
    unsortedPlaces[6] = new Location(6.8,1.3,"Mexiko     "); 
    unsortedPlaces[7] = new Location(8.1,1.6,"China      "); 
    unsortedPlaces[8] = new Location(7.3,8.8,"Japan      "); 
    unsortedPlaces[9] = new Location(9.9,9.4,"Russland   ");   
       for (int i = 0 ; i < unsortedPlaces.length ; i++)        //Output list of locations
       {                                                     
       System.out.print("unsortedPlaces[" + i + "] = "); 
       System.out.print(unsortedPlaces[i].getN()+" ---X="+unsortedPlaces[i].getX()+"--- ---Y="+unsortedPlaces[i].getY()+"---\n");           
       }
      
    for (int i=1; i<unsortedPlaces.length; i++) {               //distance between Schweiz and the other locations
    System.out.println("Schweiz - "+unsortedPlaces[i].getN());
    double x1 = unsortedPlaces[0].getX();
    double x2 = unsortedPlaces[i].getX();                                      
    double y1 = unsortedPlaces[0].getY();
    double y2 = unsortedPlaces[i].getY();
    double actualPlace =Math.sqrt(Math.pow(x2-x1, 2)+Math.pow(y2-y1, 2));
    System.out.println(actualPlace+"\n");
    }
    }  
  }  
}
Ich habe nun die Distanz zwischen einem Ort und den nächsten berechnet (Schweiz mit anderen Orten) - funktioniert soweit auch alles. Nun möchte ich jedoch sortieren und beginnend mit der kürzesten Distanz alle Orte in ein Array packen.
Allerdings muss ich sagen, hab ich absolut keinen Ansatz wie dies zu bewerkstelligen ist. Über Hilfe würde ich mich sehr freuen.

Grüße,
Rob
 

XHelp

Top Contributor
Du kannst dir entweder Comparator/Comparable anschauen: Galileo Computing :: Java ist auch eine Insel – 9 Besondere Klassen der Java SE
oder es eben selber machen, Sortieralgorithmen gibt es wie Sand am Meer (bei der Gelegenheit: http://www.java-forum.org/buecher-tutorials-links/116539-sortieralgorithmen-getanzt.html )
z.B.:
Code:
for (int i=0;i<unsortedPlaces.length-1;i++) {
  //minDistance = distanz zu unsortedPlaces[i];
  //minIndex = i;
  for (int j=i+1;j<unsortedPlaces.length) {
    //wenn Distanz zu unsortedPlaces[j] kleiner als das Minimum ist, dann:
    //minDistance = neue Distanz
    //minIndex = j;
  }
  //unsortedPlaces von i und minIndex vertauschen
}
 
R

Rob_der_Orte

Gast
Danke XHelp, allerdings scheiterts noch an der Einbindung.

Ich möchte mal die genaue Aufgabenstellung bereitstellen. Vielleicht bin ich mittlerweile total auf dem Holzweg.:

implementieren eine Klasse zur Beschreibung einer Route.
Diese soll aus einer Liste von Orten bestehen und nach der Länge der Route befragt werden können. Die Klasse soll eine Methode zur Rückgabe der Ortsliste enthalten.


Entwickeln Sie einen Algorithmus zur Berechnung der kürzesten Verbindung zwischen einer Liste von Orten.
Bei dem Algorithmus Travelling Salesman wird zu einem gegebenen Startpunkt (erster Ort in der Input-Liste) der naheste Ort aus der gegebenen Liste ermittelt.
Von dem auf diese Weise ermittelten Ort ist der nächstgelegene noch unbesuchte Ort zu ermitteln.
Dieser Schritt wird solange wiederholt bis alle Orte in geordneter Reihenfolge vorliegen.
Jeder Ort darf nur einmal (bis auf Start-/Zielpunkt) in der geordneten Reihenfolge enthalten sein. Den Endpunkt der ermittelten Route bildet der Startpunkt.


Zeigen Sie die Funktionsweise der Klassen in dem Sie mindestens eine Instanz einer Route anlegen, deren Länge, die kürzeste Abfolge der darin
enthaltenen Orte und diese Länge ausgeben.
 

XHelp

Top Contributor
Und welche Ansätze hast du schon? Du musst ja auch die Länge der Route berechnen.
Es steht ja schon als gar nicht so dezenter Hinweis, dass du bei Travelling Salesman schauen solltest. Gibt es da Fragen? Oder hast du generell irgendwelche konkreten Fragen?
 
R

Rob_der_Orte

Gast
Also prinzipiell war meine Idee die folgende:
Input:

unsortedPlaces: Liste von Orten

Output:

sortedPlaces: Liste der Orte sortiert nach Distanz



Aufbau der Methode:
1. Lege eine Variable posOfNearest an, welche die Position des Ortes mit dem geringsten Abstand speichert
2. Füge den ersten Ort der unsortedPlaces zu den sortedPlaces hinzu
3. Durchlaufe alle Orte der unsortedPlaces
1. Ermittle durch Aufruf obiger Methode den dichtesten Nachbar zum Ort an der posOfNearest in der unsortierten Liste
2. Speichere die so ermittelte Position des Nachbarn in der posOfNearest(Somit dient diese neue Position als Grundlage für die Berechnung des folgenden dichtesten Nachbarn)
3. Füge den Ort an der eben ermittelten Stelle in die Liste der sortierten Orte
4. Nachdem alle unsortierten Orte analysiert wurden: Gebe die Liste sortedPlaces zurück


Aber wie gesagt, an der Umsetzung hapert es bei mir :(
 
R

Rob_der_Orte

Gast
Um die Frage zu konkretisieren:
Ich habe ja nun die Berechnung der Orte zueinander durchgeführt (actualPlace) und möchte diese nun sortiert in einem "sortedPlaces" Array nach dem bereits vorhandenen Schema: double double String, abspeichern, aber wie?
Also wie muss ich diese Methode aufbauen und implementieren?
 

Michael...

Top Contributor
Bin mir nicht sicher, ob ich das richtig verstanden habe:
Es geht um die Sortierung bzgl. einer Entfernung zu einem Referenzort?

Grundsätzlich würde ich vom Array auf eine List wechseln und diese dann mittels Comparator sortieren lassen:
Java:
	ArrayList<Location> location2Route = new ArrayList<Location>();

	location2Route.add(new Location(9.3, 5.4, "Schweiz"));
	location2Route.add(new Location(3.2, 6.7, "Deutschland"));
	location2Route.add(new Location(2.6, 3.1, "Spanien"));
	location2Route.add(new Location(1.4, 5.4, "Portugal"));
	location2Route.add(new Location(5.5, 2.9, "Schweden"));
	location2Route.add(new Location(4.3, 5.1, "Norwegen"));
	location2Route.add(new Location(6.8, 1.3, "Mexiko"));
	location2Route.add(new Location(8.1, 1.6, "China"));
	location2Route.add(new Location(7.3, 8.8, "Japan"));
	location2Route.add(new Location(9.9, 9.4, "Russland"));
		
	final Location refLocation = location2Route.get(0);
		
	Collections.sort(location2Route, new Comparator<Location>() {
		public int compare(Location loc1, Location loc2) {
			double dist1 = Math.pow(loc1.getX()-refLocation.getX(), 2)
				+ Math.pow(loc1.getY()-refLocation.getY(), 2);
			double dist2 = Math.pow(loc2.getX()-refLocation.getX(), 2)
				+ Math.pow(loc2.getY()-refLocation.getY(), 2);
			if (dist1==dist2)
				return 0;
			return dist1>dist2?1:-1;
		}
	});
	
	for (int i=0; i<location2Route.size(); i++) {
		Location loc = location2Route.get(i);
		System.out.println(loc + " Distanz: " +  Math.sqrt(Math.pow(loc.getX()-refLocation.getX(), 2)
				+ Math.pow(loc.getY()-refLocation.getY(), 2)));
	}
 
R

Rob_der_Orte

Gast
Danke Michael. Du hast die Aufgabe richtig verstanden und dein Vorschlag sieht ziemlich gut aus. Allerdings hab ich von ArrayList's noch weniger Ahnung als von Arrays ansich :D
Kann ich den Code so in meine main-methode stecken?
Oder wie wird eine ArrayList eingebunden?
 
R

Rob_der_Orte

Gast
google ist mein Freund. Ich hab jetzt
[Java]import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;[/code]
oben in die Datei gepackt und nun läufts. Ich schau mal ob ich durchsehe und melde mich gegebenenfalls wieder. Danke soweit erstmal!
 
R

Rob_der_Orte

Gast
Okay, es läuft und ich hab es soweit verstanden.
An dieser Stelle nochmal ein riesengroßes Danke an Michael und natürlich alle anderen Helfer!
 
R

Rob_der_Orte

Gast
Hallo nochmal.
Ich muss mich noch einmal an euch wenden.
Momentan sieht die Route.class so aus:
[JaVA]
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Route //new class named Route
{ //declaration
public double actualPlace;

public static void main(String[] args)
{
ArrayList<Location> unsortedPlaces = new ArrayList<Location>(); //create a list of 10 locations
unsortedPlaces.add(new Location(9.3, 5.4, "Schweiz "));
unsortedPlaces.add(new Location(3.2, 6.7, "Deutschland"));
unsortedPlaces.add(new Location(2.6, 3.1, "Spanien "));
unsortedPlaces.add(new Location(1.4, 5.4, "Portugal "));
unsortedPlaces.add(new Location(5.5, 2.9, "Schweden "));
unsortedPlaces.add(new Location(4.3, 5.1, "Norwegen "));
unsortedPlaces.add(new Location(6.8, 1.3, "Mexiko "));
unsortedPlaces.add(new Location(8.1, 1.6, "China "));
unsortedPlaces.add(new Location(7.3, 8.8, "Japan "));
unsortedPlaces.add(new Location(9.9, 9.4, "Russland "));

System.out.println("===========================================");
for (Location actualPlace : unsortedPlaces) { //show all objects of the list
actualPlace.showLocation();
}
System.out.println("===========================================");
final Location refLocation = unsortedPlaces.get(0);

Collections.sort(unsortedPlaces, new Comparator<Location>() { //sort algorithm of distances between schweiz and other locations
public int compare(Location loc1, Location loc2) {
double dist1 = Math.pow(loc1.getX()-refLocation.getX(), 2)
+ Math.pow(loc1.getY()-refLocation.getY(), 2);
double dist2 = Math.pow(loc2.getX()-refLocation.getX(), 2)
+ Math.pow(loc2.getY()-refLocation.getY(), 2);
if (dist1==dist2)
return 0;
return dist1>dist2?1:-1;
}
});
ArrayList<Location> sortedPlaces = new ArrayList<Location>(); //create a list of sorted Locations
for (int i=0; i<unsortedPlaces.size(); i++) { //output of sorted list
Location loc = unsortedPlaces.get(i);
sortedPlaces.add(new Location(loc.getX(),loc.getY(),loc.getN())); //add sorted places to sortedPlaces
System.out.println(loc.getN() + " Distanz: " + Math.sqrt(Math.pow(loc.getX()-refLocation.getX(), 2)
+ Math.pow(loc.getY()-refLocation.getY(), 2)));
}
double shortestDistance; //shortestDistance calculation
for (int i=0; i<sortedPlaces.size(); i++){
Location loc = sortedPlaces.get(i);
double distance1 = Math.sqrt(Math.pow(loc.getX()-refLocation.getX(), 2)
+ Math.pow(loc.getY()-refLocation.getY(), 2));
System.out.println("ShortestDistance= "+distance1 + "loc=" + loc.getN());
for (i=0; i<sortedPlaces.size(); i++) {
double distance2 = Math.sqrt(Math.pow(loc.getX()-refLocation.getX(), 2)
+ Math.pow(loc.getY()-refLocation.getY(), 2));
shortestDistance = distance1+distance2;
}
}
}
}

[/code]

Nun möchte ich als letzten Schritt noch folgendes umsetzen:
Input:
sortedPlaces: Liste der sortierten Orte (erzeugt durch obige Methode)

Output:
shortestDistance: kürzeste Distanz (Summe der Distanzen zwischen je zwei nacheinander gespeicherten Orten der Liste)

Aufbau der Methode:
1. Lege eine lokale Variable shortestDistance an
2. Durchlaufe die Liste der sortedPlaces
2.1. Und addiere jeweils die Distanz zwischen einem Ort i und dessen Nachfolger i+1 zur Variable shortestDistance
3. Nachdem die Liste vollständig durchlaufen ist: Gebe den Wert des kürzesten Distanz (shortestDistance) zurück.


ich hab es schon versucht umzusetzen, jedoch bekomm ich immer den Wert 0 zurück. Ich weiß einfach nicht woran das liegt :(
 

Michael...

Top Contributor
ich hab es schon versucht umzusetzen, jedoch bekomm ich immer den Wert 0 zurück. Ich weiß einfach nicht woran das liegt :(
An so ziemlich vielen Fehlern im Code?

Doch zu nächst mal ein Schritt zurück: Warum erzeugst Du neue Location Objekte und legst sie in sortedPlaces ab? Macht in dem Code keinen Sinn.

Zurück zur eigentlichen Frage/Problem
Trotz der vielen Schleifen und dem drum rum ermittelst Du immer nur die Distanz zwischen Schweiz und Schweiz. Deshalb ist Dein Ergebnis 0.
Dann sollst Du ja den Abstand zwischen den jeweils aufeinander folgenden Einträgen in der Liste ermitteln. Du Berechnest immer den Abstand zur Schweiz

Weitere Fehler:
In der inneren der verschachtelten for-Schleifen nutzt den Zähler der äußeren (Warum überhaupt die zwei Schleifen??)

2. Durchlaufe die Liste der sortedPlaces
Das machst Du ja mehr als einmal
2.1. Und addiere jeweils die Distanz zwischen einem Ort i und dessen Nachfolger i+1 zur Variable shortestDistance
Das machst Du gar nicht. Du weist der Variablen shortestDistance immer neue Werte zu (die auch noch - wie oben erwähnt - immer 0 sind)
3. Nachdem die Liste vollständig durchlaufen ist: Gebe den Wert des kürzesten Distanz (shortestDistance) zurück.
Eine Ausgabe sehe ich nicht.

und ich hab es soweit verstanden
da bin ich mir nicht so sicher ;-)
 
R

Rob_der_Orte

Gast
sortedPlaces habe ich angelegt um die Distanzen sortiert ausgeben zu können. Anschließend wollte ich diese Distanzen zu einer Route zusammenfügen, wobei Start und Zielpunkt die Schweiz darstellen sollte.

Um den Abstand von jeweils 2 aufeinanderfolgenden Orten zu berechnen wollte ich eigentlich gern deine Vorarbeit nutzen, allerdings kam mir diesbezüglich keine Idee das umzusetzen. Daher habe ich versuch die Rechnung nochmal neu zu machen und dann jeweils distanz1 und distanz2 zu addieren. Aber so richtig hat das wohl nicht geklappt.

Ich weiß auch nicht was ich mir dabei gedacht habe.
Eigentlich sollte ja eine Schleife genügen. Ich dachte mir da sowas:
[Java]for (int i=0; i<sortedPlaces.size(); i++){
Location loc = sortedPlaces.get(i);
double distance1 = Math.sqrt(Math.pow(loc.getX()-refLocation.getX(), 2)
+ Math.pow(loc.getY()-refLocation.getY(), 2));[/Java]

wofür steht eigentlich dieses "ref"Location?
Ich dachte das wäre eine Art Verweis auf den jeweiligen Nachfolger. Aber dann müsste er doch alle Orte durcharbeiten?
Ansonsten würde ich es mit loc.getY/X()+1 versuchen. Ist der Ansatz korrekt?
Anschließend soll der Distanzwert in einer Variable gespeichert werden und jeweils mit dem nächsten Distanzwert addiert werden.Bis letztlich alle Distanzen zusammengerechnet wurden.
 
R

Rob_der_Orte

Gast
Achso, das hab ich wohl übersehen. Dann ist es ja kein Wunder, dass er immer den ersten Ort (Schweiz) für die Distanzberechnung nutzt.
Ist es mit dem Algorithmus überhaupt möglich jeweils die aufeinander folgenden Orte zu vergleichen?
Sprich:
Ort 1 -> Distanz zu nächst gelegenen Ort 2 = -> Speicher in sortedPlaces
Ort 2 -> Distanz zu nächst gelegenen Ort 3 = -> Speicher in sortedPlaces
Ort 3 -> Distanz zu nächst gelegenen Ort 4 = -> Speicher in sortedPlaces
...

[Java]
final Location refLocation = unsortedPlaces.get(0);
Collections.sort(unsortedPlaces, new Comparator<Location>() { //sort algorithm of distances between schweiz and other locations
public int compare(Location loc1, Location loc2) {
double dist1 = Math.pow(loc1.getX()-refLocation.getX(), 2)
+ Math.pow(loc1.getY()-refLocation.getY(), 2);
double dist2 = Math.pow(loc2.getX()-refLocation.getX(), 2)
+ Math.pow(loc2.getY()-refLocation.getY(), 2);
if (dist1==dist2)
return 0;
return dist1>dist2?1:-1;
}
});
[/code]
 

Michael...

Top Contributor
Wie man die Distanz zwischen zwei Location Objekten ausrechnet weisst Du ja.
Jetzt musst Du nur noch die Liste mittels for Schleife durchlaufen und die Distanz zwischen der "aktuellen" Location und dem nachfolgenden Listeneintrag berechnen. Diese Zwischendistanzen musst Du dann einfach nur in der Variable shortestDistance aufsummieren.
Sollte mit vier Zeilen Code möglich sein. Will man es leserlicher gestalten will mit sechs Zeilen.
 
R

Rob_der_Orte

Gast
Also um jetzt erstmal wieder einen Durchblick zu erhalten. Die Liste sortedPlaces, die ich mithilfe deines comparator-algorithmus' erstellt habe, nützt mir gar nichts, da dort nur die Distanzen von Ort1(Schweiz) zu den jeweilig anderen Orten gespeichert sind.
Also muss eine for-schleife her um die unsortedPlaces-Liste zu sortieren, jeweils nach der kürzesten Distanz der jeweils aufeinander folgenden Orte.
Ort 1 - > Ort 2
Ort 2 - > Ort 3
Ort 3 - > Ort 4
...


Okay, mein Versuch ist der hier: allerdings bekomme ich hier die Fehlermeldung vom Compiler, dass keine weiteren Orte in der Liste enthalten sind.

[Java]
double shortestDistance = 0;
for (int i=0; i<unsortedPlaces.size(); i++) {
double x1 = unsortedPlaces.get(i).getX();
double x2 = unsortedPlaces.get(i++).getX();
double y1 = unsortedPlaces.get(i).getY();
double y2 = unsortedPlaces.get(i++).getY();
double distance = Math.sqrt(Math.pow(x2-x1, 2) + Math.pow(y2-y1, 2));
shortestDistance = shortestDistance + distance;
System.out.println(shortestDistance) ;
}
[/Java]
 

Michael...

Top Contributor
Die Schleife darf nur bis
Code:
i<unsortedPlaces.size()-1
laufen. Und bitte keine
Code:
i++
in der Schleife. Einfach nur
Code:
i+1
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Methoden Array aus verschiedenen Methoden bearbeiten bzw. öffnen Java Basics - Anfänger-Themen 18
U Objekte in Array erstellen und Methode in verschiedenen klassen aufrufen Java Basics - Anfänger-Themen 5
Bierhumpen Array gefüllt mit verschiedenen Werten Java Basics - Anfänger-Themen 7
C Globale Variablen und Array mit verschiedenen Typen Java Basics - Anfänger-Themen 3
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
AhmadSlack Array Java Basics - Anfänger-Themen 7
Jambolo Kartenhand Array Java Basics - Anfänger-Themen 14
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
EykS 3D Druckdatei basierend auf 3D Array? Java Basics - Anfänger-Themen 3
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
Chris.089 2 Werte im Array tauschen Java Basics - Anfänger-Themen 6
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
L Gridmuster in einem Array Java Basics - Anfänger-Themen 2
sgtcoopa Array übergeben Schleife Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben