# mit Werten aus 2D-Array rechnen



## schrobi (1. Jun 2009)

Moinmoin,

hatte ja angedroht, dass ich Euch nochmal belästigen muss 

Folgende Aufgabe:


> Entwickeln sie ein Java‐Programm Route.java, mit dem die Länge einer beliebigen Autorundreise zwischen acht verschiedenen Städten ermittelt wird.
> 
> Anforderungen an das Programm:
> • Die Entfernungen zwischen den Städten sollen intern in einer Entfernungstabelle
> ...



So. Die Matrix habe ich mir schon mit Hilfe von Google Earth erstellt. Möchte nun die Standartroute "fahren". 


> Städte: Aachen, Berlin,	Chemnitz, Dresden, Erfurt, Flensburg, Garmisch, Hamburg
> im Array:   0         1          2            3         4          5             6            7



Da das Ganze ja 2D ist gibts natürlich auch noch ne Y-Achse.

Mein Anfang sieht bisher so aus:

```
import java.io.*;

public class Route 
{
	public static void main (String[] args) throws IOException 
  	{
  		BufferedReader stdin = new BufferedReader newInputStreamReader(System.in));
	
    	        String inData;
    	        String antwort;
    	        int xpos;
       	        int ypos;
       	        int[][] entfernung =
       	        { {0, 640, 580, 650, 440, 630, 710, 490},
       	           {640, 0, 260, 190, 300, 430, 670, 290},
       	           {580, 260, 0, 70, 150, 670, 480, 520},
       	           {650, 190, 70, 0, 220, 650, 550, 500},
       	           {440, 300, 150, 220, 0, 550, 490, 400},
       	           {630, 430, 670, 650, 550, 0, 1020, 160},
       	           {710, 670, 480, 550, 490, 1020, 0, 860},
       	           {490, 290, 520, 500, 400, 160, 860, 0} 
       	};
}
}
```

Wie bekomm ich das nun sauber hin? Ich denke es ist nicht gefragt jeden Arraywert in ein Sys.out.print zu packen.

Steh hier grad irgendwie wie der Ochs vorm Berg und weiss nicht weiter.???:L

Wär toll wenn Ihr mir etwas unter die Arme greift und mir nen Denkanstoß gebt.

Schrobi

PS: Hoffe das Posting ist nicht zu verwirrend...


----------



## Civilazi (1. Jun 2009)

Du brauchst jetzt noch eine beliebige Rundreise durch die Städte -->
z.B. 0 4 7 1 2 5 3 6 0, kann die z.B. der Benutzer eingeben, das scheint ja unter "Wunsch" zu fallen.
Dann hast du die Entfernungen entfernung[0][4] + entfernung[4][7] + ... + entfernung[6][0].
Die gibst du einzeln und als Summe aus.


----------



## schrobi (1. Jun 2009)

Aber brauch ich nicht erstmal die Standardroute? Also in der Reihenfolge 0 1 2 3 4 5 6 7 0.

Allgemein hatte ich gedacht dass ich den user wählen lasse zwischen Standard und Wunsch. Bei Standard halt 0 1 2 3 4 5 6 7 0 und bei Wunsch muss man dann halt beliebige Zahlen zwischen 0 und 7 eingeben. Mit diesen eingegebenen Zahlen rechnet das Programm dann die Route und gibt die teilKM und gesamtKM aus. 
So seh ich die Aufgabenstellung.

Nun weiss ich nicht wie ich es hinbekomme, dass z.B. die Eingabe 0 4 9 0 korrekt auf die Matrize zugreift und damit rechnet.
Man müsste dann ja quasi für jede erdenkliche Kombination eine Zahl haben oder seh ich das zu kompliziert. Seh wahrscheinlich den Wald vor lauter Bäumen nicht..

Schrobi


----------



## schrobi (1. Jun 2009)

Soo, ich wieder.

Folgendes hat sich inzwischen bei meinem Code getan:


```
import java.io.*;

public class Route 
{
	
	public Route() { }
  		
  		
    	String inData;

       	int[][] entfernung =
       	{ {0, 640, 580, 650, 440, 630, 710, 490},
       	  {640, 0, 260, 190, 300, 430, 670, 290},
       	  {580, 260, 0, 70, 150, 670, 480, 520},
       	  {650, 190, 70, 0, 220, 650, 550, 500},
       	  {440, 300, 150, 220, 0, 550, 490, 400},
       	  {630, 430, 670, 650, 550, 0, 1020, 160},
       	  {710, 670, 480, 550, 490, 1020, 0, 860},
       	  {490, 290, 520, 500, 400, 160, 860, 0} 
       	};
       	
       	public void readIn() 
       	{
        	try 
        	{
            	BufferedReader stdin = new BufferedReader(
                new InputStreamReader(System.in));
             	inData = stdin.readLine();
             	
             	if (inData.equals("j"))  
       			{
     	  		System.out.println("Platzhalter");
       		  	}
    	   		else if (inData.equals("n"))
     	  		{
     	  		System.out.println("Momentan nicht verfügbar");
     	  		}
     	  		else
     	  		{
      	 		System.out.println("Bitte j oder n eingeben");
      	 		}             	
           	} 
           	catch (IOException e) 
           	{
            	System.err.println(e.toString());
        	}
        }
    
//      	public void standardroute() 
//       	{
//        entfernung[0][1];
//        entfernung[1][2];
//        entfernung[2][3];
//        entfernung[3][4];
//        entfernung[4][5];
//        entfernung[5][6];
//        entfernung[6][7];
//        entfernung[7][0];


       	public final void ausgabe() {	
       	      	
       		System.out.println("Staedte: Aachen, Berlin, Chemnitz, Dresden, " 
       							+ "Erfurt, Flensburg, Garmisch, Hamburg");
       		System.out.println("Moechten Sie diese Staedteliste nutzen? j/n");
       		readIn();

       	       		
       	}
	
}
```

und die Testklasse:

```
public class RouteTester {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Route test = new Route();
        test.ausgabe();

    }

}
```

Bin ja nicht untätig 

Weiss nun aber nicht wie ich es mit dem auskommentierten Teil anstellen soll. Habe mich entschieden erstmal die Standartroute zu nehmen und dem User keine Wahl zu lassen 

Wie kann ich es hübsch verpacken dass er mir nach jeder Stadt die km sagt und das solange bis alles abgearbeitet sind?

Schrobi


----------



## schrobi (1. Jun 2009)

So ich habe es mir nun folgendermaßen "hingepfuscht".


```
import java.io.*;

public class Route 
{
	
	public Route() { }
  		
  		
    	String inData;

       	int[][] entfernung =
       	{ {0, 640, 580, 650, 440, 630, 710, 490},
       	  {640, 0, 260, 190, 300, 430, 670, 290},
       	  {580, 260, 0, 70, 150, 670, 480, 520},
       	  {650, 190, 70, 0, 220, 650, 550, 500},
       	  {440, 300, 150, 220, 0, 550, 490, 400},
       	  {630, 430, 670, 650, 550, 0, 1020, 160},
       	  {710, 670, 480, 550, 490, 1020, 0, 860},
       	  {490, 290, 520, 500, 400, 160, 860, 0} 
       	};
       	
       	public void readIn() 
       	{
        	try 
        	{
            	BufferedReader stdin = new BufferedReader(
                new InputStreamReader(System.in));
             	inData = stdin.readLine();
             	
             	if (inData.equals("j"))  
       			{
     	  		screen();
     	  		}
    	   		else if (inData.equals("n"))
     	  		{
     	  		System.out.println("Momentan nicht verfügbar");
     	  		}
     	  		else
     	  		{
      	 		System.out.println("Bitte j oder n eingeben");
      	 		}             	
           	} 
           	catch (IOException e) 
           	{
            	System.err.println(e.toString());
        	}
        }
    
      	public int standardroute() 
       	{
       		int summe = 
        	(entfernung[0][1]+
        	entfernung[1][2]+
        	entfernung[2][3]+
        	entfernung[3][4]+
        	entfernung[4][5]+
        	entfernung[5][6]+
        	entfernung[6][7]+
        	entfernung[7][0]);
        	return summe;
		}

       	public final void ausgabe() {	
       	      	
       		System.out.println("Staedte: Aachen, Berlin, Chemnitz, Dresden, " 
       							+ "Erfurt, Flensburg, Garmisch, Hamburg");
       		System.out.println("Moechten Sie diese Staedteliste nutzen? j/n");
       		readIn();
       		
		}	
		
		public void screen() 
		{
		
			System.out.println("Start: Aachen!");
			System.out.println("Von Aachen nach Berlin: " + entfernung[0][1] + "km.");
			System.out.println("Von Berlin nach Chemnitz: " + entfernung[1][2] + "km.");
			System.out.println("Von Chemnitz nach Dresden: " + entfernung[2][3] + "km.");
			System.out.println("Von Dresden nach Erfurt: " + entfernung[3][4] + "km.");
			System.out.println("Von Erfurt nach Flensburg: " + entfernung[4][5] + "km.");
			System.out.println("Von Flensburg nach Garmisch: " + entfernung[5][6] + "km.");
			System.out.println("Von Garmisch nach Hamburg: " + entfernung[6][7] + "km.");
			System.out.println("Von Hamburg nach Aachen: " + entfernung[7][0] + "km.");
			System.out.println("Gesamtstrecke: " + standardroute());
       	       		
       	}
	
}
```

Testklasse bleibt wie oben.
Bin mir sicher, dass es nicht so gelöst ist wie es sein soll und dass ich nacharbeiten muss aber für heute bin ich meine Abgabe los. Hab auch echt die &§$% voll für heut.

Bin trotzdem gespannt auf Anregungen und Tipps&Tricks von Euch Profis.:toll:

Gute Nacht:autsch:

Schrobi


----------



## schrobi (23. Jun 2009)

Hallo Ihr.
Ich muss Euch leider nochmal mit dieser Aufgabe belästigen.
Habe noch ein wenig rumprobiert und war eben schon euphorisch, dass ich die theoretische Lösung gefunden habe und dann beim losproggen kam dann die Ernüchterung.
Irgendwie hauts nicht so hin wie es soll. Ich wette, dass ich wieder zu kompliziert denke.

Wollte denn Hinweis von Civilazi befolgen aber bekomms nicht hin.

Wäre daher sehr dankbar für den Einen oder Anderen Denkanstoß und Tipp.

Mein aktueller Code sieht folgendermaßen aus:


```
import java.io.*;

public class Route {
    /**
     *Standardkonstruktor
     */
    public Route() { }

    //Liest die Eingabe
    String input;
    //Anzahl der anzufahrenden Staedte.
    int counter = 7;
    //Array welches alle Entfernungskombinationen enthaelt.
    int[][] entfernung = {
        {000, 640, 580, 650, 440, 630, 710, 490},
        {640, 000, 260, 190, 300, 430, 670, 290},
        {580, 260, 000, 70, 150, 670, 480, 520},
        {650, 190, 70, 000, 220, 650, 550, 500},
        {440, 300, 150, 220, 000, 550, 490, 400},
        {630, 430, 670, 650, 550, 000, 1020, 160},
        {710, 670, 480, 550, 490, 1020, 000, 860},
        {490, 290, 520, 500, 400, 160, 860, 000}
    };
    /**
     *Einlesen der Tastatureingabe
     */
    public void readIn() {
        try {
            BufferedReader stdin = new BufferedReader(
                    new InputStreamReader(System.in));
            input = stdin.readLine();

            
        } catch (IOException e) {
            System.err.println(e.toString());
        }
    }
   

    /**
     *Frage und Aufforderung zur Eingabe an den User.
     */
    public final void ausgabe() {
        System.out.println("Staedte: Aachen, Berlin, Chemnitz, Dresden, "
                            + "Erfurt, Flensburg, Garmisch, Hamburg");
        System.out.println("Moechten Sie diese Staedteliste nutzen? j/n");
        readIn();
        if (input.equals("j")) {
                list();
            } else if (input.equals("n")) {
                System.out.println("Momentan nicht verfügbar");
            } else {
                System.out.println("Bitte j oder n eingeben");
            }
    }

    
    
    public void list() {
        int zahl;
        System.out.println("Bitte geben Sie die Nummer der Startstadt ein.");
        System.out.println("Staedte: 1 Aachen, 2 Berlin, 3 Chemnitz, 4 Dresden, "
                            + "5 Erfurt, 6 Flensburg, 7 Garmisch, 8 Hamburg");
        //Einlesen
        readIn();
        //Umwandeln in int.
        zahl = Integer.parseInt(input);
        
        for (int wdh = 1; wdh <= counter; wdh++) {
            if (zahl == 1) {
            	System.out.println("Aachen");
            	
            	System.out.println("Bitte geben Sie eine Stadtnummer aus der Liste ein.");
        	    readIn();
            	switch (zahl) {
                case 1:
            	    System.out.println("Von Aachen nach Aachen " + entfernung[0][0] + "km.");
            	    break;	
            	case 2:
            	    System.out.println("Von Aachen nach Berlin " + entfernung[0][1] + "km.");
            	    break;
            	case 3:
            	    System.out.println("Von Aachen nach Chemnitz " + entfernung[0][2] + "km.");
            	    break;
            	case 4:
            	    System.out.println("Von Aachen nach Dresden " + entfernung[0][3] + "km.");
            	    break;
            	case 5:
            	    System.out.println("Von Aachen nach Erfurt " + entfernung[0][4] + "km.");
            	    break;
            	case 6:
            	    System.out.println("Von Aachen nach Flensburg " + entfernung[0][5] + "km.");
            	    break;
            	case 7:
            	    System.out.println("Von Aachen nach Garmisch " + entfernung[0][6] + "km.");
            	    break;
            	case 8:
            	    System.out.println("Von Aachen nach Hamburg " + entfernung[0][7] + "km.");
            	    break;

            	}
            }
            
        
        	System.out.println("testtext");
        	
        }
    }
```

Die Testklasse ist so geblieben wie in dem Beitrag weiter oben.

Schrobi


----------



## aokai (23. Jun 2009)

An sich ist dein Code schon richtig, aber sehr umständlich. 

Du hast ja im Moment eine Abbildung von Zahlen auf Städte ( Also Zeichenkette). Das könntest du auch in einem Array abbilden. Du hast also ein Array in dem jede Nummer auf eine Stadt zeigt ( also z.B. stadt[1] = "Achen"). So kannst du die Switches vermeiden.

Was in deinem Programm noch fehlt ist die Gesamtlänge ( also alle Streckenabschnitte vorher + der aktuelle Streckenabschnitt).

Zusätzlich fehlt dir noch eine Abbruchbedingung. Du mußt dir die Stadt merken in der du losgefahren bist und falls du wieder in dieser ankommst endet deine Rundfahrt


----------



## schrobi (23. Jun 2009)

Hallo aokai,
danke für Deine Antwort.

Habe eben versucht meine Städte in ein Array zu packen bekomme beim kompilieren aber fehler.

```
String[] staedte = new String[8];
    staedte[0] = "Aachen";
```

Warum geht das nicht?


----------



## Michael... (23. Jun 2009)

Das passt eigentlich, was für ein Fehler kommt denn beim komplieren?

PS: Man kann die Initialisierung von Feldern auch abkürzen, z.B:

```
String[] staedte = new String[] {"Aachen", "München", "Würzburg"};
```


----------



## schrobi (23. Jun 2009)

Hi Michael...
jetzt geht es. Habe es nach Deinem Vorbild gemacht:


```
String[] staedte = new String[] {
        "Aachen", "Berlin", "Chemnitz", "Dresden", 
        "Erfurt", "Flensburg", "Garmisch", "Hamburg"};
```

Nun weiss ich ehrlichgesagt grad nicht weiter. Wollte das eben in eine if-Abfrage setzen aber wusste nicht wie. 
Dachte da an folgendes:

```
if (input = staedte[0]) {
            	System.out.println("hallo");
            }
```
Aber da sagt der compiler: incompatible types...
Wie sollte man das denn sonst mit ner if machen?


----------



## Leroy42 (23. Jun 2009)

```
if (input.equals(staedte[0]) {
            	System.out.println("hallo");
            }
```


----------



## schrobi (23. Jun 2009)

Danke Leroy42,

blöde Anfängerfehler ;o)

So sieht meine Methode nun aus:

```
public void list() {
        int zahl;
        System.out.println("Bitte geben Sie die Startstadt ein.");
        
        //Einlesen
        readIn();

        
        for (int wdh = 1; wdh <= counter; wdh++) {
            
            if (input.equals(staedte[0])) {
            	System.out.println("Start: " + staedte[0]);
            	System.out.print("von " + staedte[0] + " nach: ");
            	readIn();
            	System.out.println(staedte[1]);
            }
          

        	
        }
    }
```

Aber irgendwie wieder zu kompliziert habe ich das Gefühl. Kann man es irgendwie implementieren, dass direkt durch den Eingabestring auf das staedte-Array zugegriffen wird? Sonst müsste ich ja hier für jegliche Kombination der Router eine If-Abfrage schreiben. Haber mir (in der Theorie) gedacht, dass es im Großen und Ganzen so aussieht wie in dem Codeschnipsel nur dass halt "dynamisch" das jeweilige Array angesprochen wird durch die Eingabe.
Hoffe ihr wisst wie ich das meine.


----------



## schrobi (23. Jun 2009)

So, ich mach Schluss für heute. Bin schon wieder kurz davor alles zu löschen...*grummel*

Falls jemand noch einen Tipp für mich hat, nur her damit. Werde mich morgen früh wieder voller Elan darauf stürzen.

Wünsch Euch noch nen schönen Feierabend.

Schrobi


----------



## schrobi (24. Jun 2009)

Hallo,
ich wieder...

Habe ja in meinem vorletzten Post geschrieben, dass ich das irgendwie hinbekommen will, dass durch die Eingabe einer Stadt gleich auf das Array zugegriffen wird.
Habe nun folgendes Probiert:

```
System.out.println("Start: " + staedte[input]);
```

Da sagt mir der Compiler aber wieder: incompatible types.
Ist es überhauptder richtige Weg den ich gehe um meine Idee umzusetzen oder bin ich wieder auf dem Holzweg?
Wo ich das gerade nochmal durchlese hier... kann es sein, dass man auf Arrays nur mittels Indexzahl zugreifen kann? Also zwingend int, double etc?


----------



## Civilazi (24. Jun 2009)

Sogar nur mit int


----------



## schrobi (24. Jun 2009)

hm mist... soviel zu meinem genialen Plan... ;o)

Wie mach ich es denn am besten wenn ich durch Eingabe der Stadt auf das Array zugreifen will.. So gesehen brauch ich das Array ja gar nicht sondern kann alles über den input String machen.

Bin langsam am durchdrehen mir der blöden Aufgabe..:lol:


----------



## schrobi (24. Jun 2009)

Will Euch echt nicht nerven aber hat denn keine ne Idee oder nen Tipp für mich?


----------



## Leroy42 (24. Jun 2009)

Versuch's doch mit einer Hashmap dessen Indizes die Strings sind
und dessen Values die entsprechenden Arrays.


----------



## schrobi (24. Jun 2009)

Hi Leroy, 
danke für Deine Antwort. Habe mich schon verlassen gefühlt.

Könntest Du deinen Vorschlag evtl etwas Anfänger-mäßig erklären? 
Kann da so nicht wirklich was mit anfangen. Sorry.


----------



## Civilazi (24. Jun 2009)

Leroys Vorschlag würde auch funktionieren, aber wir können ja deine Lösung zum Laufen bringen: Was genau ist das Problem? Kann der Benutzer nicht einfach 0 4 6 7 ... statt der echten Städtenamen eingeben?


----------



## schrobi (24. Jun 2009)

Hi Civilazi,
danke für deine Hilfe 
Das war ja auch eine meiner Überlegungen. Hatte das mit den Stadtnummern ja so mit den Switch-Case gemacht. Mein konkretes Problem im Moment ist dass ich nicht weiss wie ich das mit dem Array implementieren muss.


----------



## Civilazi (25. Jun 2009)

Ok, also du hast ein Array in dem alle Städte die es gibt drinstehen.

```
String[] staedte = new String[] {
        "Aachen", "Berlin", "Chemnitz", "Dresden", 
        "Erfurt", "Flensburg", "Garmisch", "Hamburg"};
```

Dann lässt du den User 8 Zahlen eingeben (entweder 0-7 oder 1-8, wie du willst). 
Diese 8 Zahlen speicherst du in einem 
	
	
	
	





```
int[] reihenfolge = new int[8];
```
,
d.h. du machst 
Einlesen 1. Zahl --> zahl --> reihenfolge[0] = zahl;
Einlesen 2. Zahl --> zahl --> reihenfolge[1] = zahl;
...
Einlesen 8.Zahl --> zahl --> reihenfolge[7] = zahl;
In reihenfolge steht also sowas: 0 4 6 5 1 7 3 2
Dann gehst du durch reihenfolge durch und holst dir die Städte:

```
for(int i = 0; i<reihenfolge.length; i++)
{
System.out.println("von "+staedte[reihenfolge[i]]+" nach "+staedte[reihenfolge[(i+1)%reihenfolge.length]]+" sind es "+ entfernung[reihenfolge[i]][reihenfolge[(i+1)%reihenfolge.length]]+" km."); 
}
```

Siehst du, wie du das verwenden kannst? Das mit dem (i+1)%length heißt einfach, wenn i bei 7 angekommen ist, gibt es ja staedte[8] nicht, also wird modulo length gerechnet, sodass 8 --> 0. Du willst ja eine Tour, das heißt du musst am Anfang ankommen. So kannst du dein Städtearray verwenden, ohne switch etc. und kannst auch die Summe der Entfernungen ausgeben.

So wie da oben geht das natürlich nur, wenn du den User direkt die Indizes, also 0-7 eingeben lässt. Außerdem kommt natürlich quatsch raus, wenn der User keine Permutation von 0,1,...,7 eingibt, aber es ist immerhin ein Anfang


----------



## schrobi (25. Jun 2009)

Hi,
danke für die aufschlussreiche Antwort.

Habe es nun ein bisschen umgeschrieben. So siehts jetzt aus.

```
public void list() {
        
        int[] citycount = new int[8];
        
        int zahl;
        //Array in dem die Staede gespeichert sind.
        String[] staedte = new String[] {
        "Aachen", "Berlin", "Chemnitz", "Dresden", 
        "Erfurt", "Flensburg", "Garmisch", "Hamburg"};
        
        System.out.println("Bitte geben Sie die Nummer der Startstadt ein.");
        System.out.println("Staedte: 0 Aachen, 1 Berlin, 2 Chemnitz, 3 Dresden, "
                            + "4 Erfurt, 5 Flensburg, 6 Garmisch, 7 Hamburg");
        //Einlesen
        readIn();
        zahl = Integer.parseInt(input);
        citycount[0] = zahl;
        System.out.println("Start: " + staedte[citycount[0]]);
        System.out.print("Von " + staedte[citycount[0]] + " nach: " );
        
        
        for(int i = 0; i<citycount.length; i++) {
        readIn();
	System.out.println("von "+staedte[citycount[i]]+" nach "+staedte[citycount[(i+1)%citycount.length]]
            +" sind es "+ entfernung[citycount[i]][citycount[(i+1)%citycount.length]]+" km."); 
              
        }
```

Damit bekomme ich korrekt meine Startstadt angezeigt aber bei der weitern Eingabe von Zahlen will er immer nach Aachen. Bin zwar grad fleißig am rumprobieren aber wär trotzdem dankbar für einen Tipp von Euch.


----------



## bygones (25. Jun 2009)

man soll reisende nicht aufhalten ;-)

*sorryFuerSpamPost*


----------



## schrobi (25. Jun 2009)

war das jetzt auf mich oder auf mein Prog bezogen?:autsch:


----------



## bygones (25. Jun 2009)

schrobi hat gesagt.:


> war das jetzt auf mich oder auf mein Prog bezogen?:autsch:



weil du meintest "will immer nach Aachen"


----------



## schrobi (25. Jun 2009)

achso.. Ja weiss auch nicht. Das hat irgendwie Hummeln im Hintern...


----------



## aokai (25. Jun 2009)

Du kannst das auch viel leichter ohne ein Array machen in dem du die Städte speicherst. Ich schreib dir das mal in Worten auf:

1. User gibt StartStadt ein.
2. GesmtLaenge ist 0
3. LetzteStadt = StartStadt
3. User gibt AktuelleStadt ein , falls AktuelleStadt = StartStadt gebe GesamtLaenge aus und Ende
4.GesamtLaenge = GesamtLaenge + Entfernung(AktuelleStadt, LetzteStadt)
5. LetzteStadt = AktuelleStadt
6. Wir fangen wieder bei 3 an


----------



## Civilazi (25. Jun 2009)

schrobi hat gesagt.:


> Hi,
> danke für die aufschlussreiche Antwort.
> 
> 
> Damit bekomme ich korrekt meine Startstadt angezeigt aber bei der weitern Eingabe von Zahlen will er immer nach Aachen. Bin zwar grad fleißig am rumprobieren aber wär trotzdem dankbar für einen Tipp von Euch.



Bitte =) Nein, in deinem Code änderst du doch nur citycount[0], das heißt die Startstadt?! Die anderen int in diesem Array sind dann per default 0, das heißt Aachen. Du müsstest schon sowas haben:


```
for(int i = 0; i<citycount.length; i++)
{
System.out.println("Geben sie die "+i+1". Stadt an: ");
zahl = einlesen;
citycount[i] = zahl;
}
```

Dann steht da eine Reihenfolge drin.


----------



## schrobi (25. Jun 2009)

Also mein jetziger Stand ist folgender:

```
public void list() {
        int lastCity;
        int strecke = 0;
        int actualCity = 0;
        int zahl;
        //Array in dem die Staede gespeichert sind.
        String[] staedte = new String[] {
        "Aachen", "Berlin", "Chemnitz", "Dresden", 
        "Erfurt", "Flensburg", "Garmisch", "Hamburg"};
        
        System.out.println("Bitte geben Sie die Nummer der Startstadt ein.");
        System.out.println("Staedte: 0 Aachen, 1 Berlin, 2 Chemnitz, 3 Dresden, "
                            + "4 Erfurt, 5 Flensburg, 6 Garmisch, 7 Hamburg");
        //Einlesen
        readIn();
        zahl = Integer.parseInt(input);
        lastCity = zahl;
        
        System.out.println("Start in: " + staedte[lastCity]);
        
        for (int wdh = 1; wdh <= counter; wdh++) {
            while (true) {
                System.out.print("von " + staedte[lastCity] + " nach:");
                
                readIn();
                
                zahl = Integer.parseInt(input);
                
                actualCity = zahl;
                System.out.print("Von " + staedte[lastCity] + " nach: " + staedte[actualCity]);
                System.out.println(" sind " + entfernung[lastCity][actualCity] + " km.");
                lastCity = actualCity;
            }
        }
```

Klappt auch bisher ganz gut. Also er nimmt die Eingabe auf, gibt mir die Stadt und bei weiterer Eingabe die nächste Stadt mit km Entfernung. Muss jetzt nurnoch hinbekommen dass ich irgendwie aus der while-schleife rauskomm wenn die Startstadt eingegeben wird und natürlich noch die Summe der km..


----------



## schrobi (25. Jun 2009)

Sooo ich glaube ich habs. Ist nurnoch ein kleiner Fehler drin.. aber der bereitet mir wieder Kopfzerbrechen... Wenn ich als Startstadt Aachen - also 0 - wähle ist der Trip sofort zuende.:bahnhof:
Ansonsten funktioniert jetzt glaube ich alles. Aber seht selbst ;o)

```
public void list() {
        int start;
        int lastCity;
        int strecke = 0;
        int actualCity = 0;
        int zahl;
        //Array in dem die Staede gespeichert sind.
        String[] staedte = new String[] {
        "Aachen", "Berlin", "Chemnitz", "Dresden", 
        "Erfurt", "Flensburg", "Garmisch", "Hamburg"};
        
        System.out.println("Bitte geben Sie die Nummer der Startstadt ein.");
        System.out.println("Staedte: 0 Aachen, 1 Berlin, 2 Chemnitz, 3 Dresden, "
                            + "4 Erfurt, 5 Flensburg, 6 Garmisch, 7 Hamburg");
        //Einlesen
        readIn();
        zahl = Integer.parseInt(input);
        start = zahl;
        lastCity = start;
        System.out.println("Start in: " + staedte[start]);
        
        for (int wdh = 1; wdh <= counter; wdh++) {
            while (start != actualCity) {
            	
                System.out.print("von " + staedte[lastCity] + " nach:");
                
                readIn();
                
                zahl = Integer.parseInt(input);
                
                actualCity = zahl;
                System.out.print("Von " + staedte[lastCity] + " nach: " + staedte[actualCity]);
                System.out.println(" sind " + entfernung[lastCity][actualCity] + " km.");
                strecke = strecke + entfernung[lastCity][actualCity];
                lastCity = actualCity;
                
                break;
            } 
        }
        System.out.println("Gesamtstrecke: " + strecke);
    }
```

EDIT: ich denke mal der Fehler liegt hier: int actualCity = 0; aber ohne die initialisierung mault der compiler wieder rum...


----------



## Civilazi (25. Jun 2009)

Unsauber, aber würde funktionieren: 
Füg in Zeile 21 ein
	
	
	
	





```
actualcity = start+1;
```
Dann ist beim ersten Aufruf actualcity != start und danach sollte das ja klappen. 
Wenn du das hast und dir das zu unschön ist, denk mal drüber nach, wie du das strukturieren kannst, dass er die erste Stadt in die Tour einfügt, danach weiter einliest und irgendwas macht, wenn man wieder am Anfang ist...
Ansonsten schonmal Glückwunsch zum erfolgreichen Herumhantieren mit Arrays, hast bestimmt was gelernt


----------



## schrobi (25. Jun 2009)

Hey danke Civilazi jetzt funzt es wie gewünscht.

Ja ich denk schon, dass ich was gelernt habe. Hat mich zwar viel Nerven gekostet aber zwischendurch wenn was lief kam schon sowas wie Spaß beim proggen auf 

Werde nun noch alles schön kommentieren und dann nachher dem Prof schicken. Mal sehn obs OK ist.

Möchte mich nochmal ganz herzlich bei allen bedanken die hier mitgeholfen haben. :toll:

Mal sehn wann Ihr wieder was von mir hört 

Schrobi


----------

