mit Werten aus 2D-Array rechnen

Status
Nicht offen für weitere Antworten.

schrobi

Aktives Mitglied
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
(zweidimensionale Reihung) gespeichert werden, wie sie aus den Reiseatlanten oder
Kalendern bekannt sind: In Zeilen und Spalten sind die Städte aufgelistet. Der Schnittpunktvon Zeile und Spalte enthält die Entfernungskilometer von der Stadt in der Zeile zur Stadt in
der Spalte. Es wird davon ausgegangen, dass die Entfernung von StadtA nach StadtB gleich
der Entfernung von StadtB nach StadtA ist. Die Matrix hat damit eine spezielle Struktur:
entfernung[stadtA][stadtA] = 0
entfernung[stadtA][stadtB] = entfernung[stadtB][stadtA]
Mindestanforderung:
Die Entfernungsmatrix wird im Programm initialisiert.
Wunschanforderung:
Der Programmbenutzer wählt, ob er eine vorgegebenen Entfernungsmatrix nutzt oder im
Programm eigene Städte und deren Entfernungen eingibt.
• Die Autotour wird vom Programmbenutzer durch die Wahl der Städte bestimmt. Vom
Programm ist die Entfernung von Stadt zu Stadt und die Gesamtlänge der Strecke am
Bildschirm auszugeben. Die Rundreise endet, wenn die Startstadt eingegeben wird.

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:
Java:
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

Bekanntes Mitglied
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

Aktives Mitglied
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..:eek:

Schrobi
 

schrobi

Aktives Mitglied
Soo, ich wieder.

Folgendes hat sich inzwischen bei meinem Code getan:

Java:
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:
Java:
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 :D

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

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

Java:
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

Aktives Mitglied
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:

Java:
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

Mitglied
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

Aktives Mitglied
Hallo aokai,
danke für Deine Antwort.

Habe eben versucht meine Städte in ein Array zu packen bekomme beim kompilieren aber fehler.
Java:
String[] staedte = new String[8];
    staedte[0] = "Aachen";

Warum geht das nicht?
 

Michael...

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

PS: Man kann die Initialisierung von Feldern auch abkürzen, z.B:
Java:
String[] staedte = new String[] {"Aachen", "München", "Würzburg"};
 

schrobi

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

Java:
    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:
Java:
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?
 

schrobi

Aktives Mitglied
Danke Leroy42,

blöde Anfängerfehler ;o)

So sieht meine Methode nun aus:
Java:
    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.
 
Zuletzt bearbeitet:

schrobi

Aktives Mitglied
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

Aktives Mitglied
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:
Java:
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?
 

schrobi

Aktives Mitglied
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:
 

Leroy42

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

schrobi

Aktives Mitglied
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

Bekanntes Mitglied
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

Aktives Mitglied
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

Bekanntes Mitglied
Ok, also du hast ein Array in dem alle Städte die es gibt drinstehen.
Java:
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
Java:
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:
Java:
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 :)
 
Zuletzt bearbeitet:

schrobi

Aktives Mitglied
Hi,
danke für die aufschlussreiche Antwort.

Habe es nun ein bisschen umgeschrieben. So siehts jetzt aus.
Java:
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.
 

aokai

Mitglied
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

Bekanntes Mitglied
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:

Java:
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

Aktives Mitglied
Also mein jetziger Stand ist folgender:
Java:
    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

Aktives Mitglied
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)
Java:
    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

Bekanntes Mitglied
Unsauber, aber würde funktionieren:
Füg in Zeile 21 ein
Java:
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 ;)
 
Zuletzt bearbeitet:

schrobi

Aktives Mitglied
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 :D

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
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
Csircc Neuer Array mit geringerer Länge und selben werten. Java Basics - Anfänger-Themen 2
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
E OOP Array anlegen mit unterschiedlichen Werten Java Basics - Anfänger-Themen 8
M Speichern von Werten in Array Java Basics - Anfänger-Themen 1
P Input/Output Bestimmte Anzahl von Werten in einem Array an Methode übergeben Java Basics - Anfänger-Themen 2
L Array mit Werten belegen Java Basics - Anfänger-Themen 7
F Array mit Scanner-Werten Java Basics - Anfänger-Themen 4
V Methoden Matrix als 1D Array mit Werten füllen Java Basics - Anfänger-Themen 12
V Anzahl von gleichen Werten in einem Int-Array ermitteln Java Basics - Anfänger-Themen 4
L Array - Nach 2 gleichen Werten stoppen Java Basics - Anfänger-Themen 5
P Objekt mit Werten aus Array füllen Java Basics - Anfänger-Themen 10
B Zweidimensionales Array mit boolean Werten Java Basics - Anfänger-Themen 3
J double-Array mit Werten von Methode füllen und an andere Methode übergeben Java Basics - Anfänger-Themen 3
L Array - Eingabe von Werten Java Basics - Anfänger-Themen 2
C Array mit int Werten füllen ( von z.B. 1 - x ) Java Basics - Anfänger-Themen 13
E Array Werten Icons zuweisen Java Basics - Anfänger-Themen 3
Bierhumpen Array gefüllt mit verschiedenen Werten Java Basics - Anfänger-Themen 7
T 2D Array nach gleichen Werten durchsuchen Java Basics - Anfänger-Themen 6
M Array mit Werten füllen und sortieren Java Basics - Anfänger-Themen 2
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
T PDF-Formula (XFDF) via Mail - Betreff mit Werten aus PDF-Formular ergänzen Java Basics - Anfänger-Themen 2
A Werten aus dem Text ausliesten Java Basics - Anfänger-Themen 6
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19
C Methode Grouping mit Werten ausgeben Java Basics - Anfänger-Themen 2
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
B Rückgabe von zwei Werten: String und double Java Basics - Anfänger-Themen 14
Henri Vergabe von undeklarieten Werten Java Basics - Anfänger-Themen 64
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
M Übergabe von Werten Java Basics - Anfänger-Themen 10
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
M Java Arrays mit Werten initialisieren Java Basics - Anfänger-Themen 3
G Interpolation von Werten im 3D-Raum Java Basics - Anfänger-Themen 3
N Zählen von Rationalen Werten eines Arrays Java Basics - Anfänger-Themen 10
R Objekt erstellen - Attribute mit mehreren Werten Java Basics - Anfänger-Themen 1
F JButton [] mit Werten hinterlegen Java Basics - Anfänger-Themen 10
L Frage zur Rückgabe von Werten bei Methoden Java Basics - Anfänger-Themen 4
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
J JFrame ausgabe von Werten Java Basics - Anfänger-Themen 9
W Klassen [GELÖST] Objekte während der Laufzeit mit neuen veränderten Werten beliebig oft initialisieren Java Basics - Anfänger-Themen 2
J ArrayList<int[]> wird beim hinzufügen von werten komplett überschrieben warum? Java Basics - Anfänger-Themen 1
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
C Arrays zusammenfügen mit abwechselnden Werten Java Basics - Anfänger-Themen 3
F Map nach Werten durchsuchen Java Basics - Anfänger-Themen 3
S Suche richtigen Typ für Variabel mit den Werten (neu, gebraucht, beschädigt) Java Basics - Anfänger-Themen 7
T Liste mit 2 Werten pro Eintrag Java Basics - Anfänger-Themen 9
F Effizientes Lesen von 65 Datein mit Boolean Werten Java Basics - Anfänger-Themen 6
A OOP Buchstaben mit ASCII Werten darstellen Java Basics - Anfänger-Themen 1
M Ausgeben eines 2D Arrays mit int UND String werten - BLUEJ! Java Basics - Anfänger-Themen 4
M Mit Werten aus Arrays in anderen Methoden rechnen? Java Basics - Anfänger-Themen 3
D Sortieren von int Werten von Objekten in einer LinkedList, kann nicht auf int Werte zugreifen Java Basics - Anfänger-Themen 3
N mit Werten aus einer mysql datenbank in java rechnen Java Basics - Anfänger-Themen 17
X Methoden Vertauschen von 2 Werten eines Arrays Java Basics - Anfänger-Themen 13
J Subtraktion von double Werten Java Basics - Anfänger-Themen 3
P Vererbung Auslesen von Werten einer ArrayList Java Basics - Anfänger-Themen 30
S Erfahrungswerte von schnelles durchlaufen von Listen mit 2 Werten Java Basics - Anfänger-Themen 10
T Externes Programm mit Werten versorgen Java Basics - Anfänger-Themen 4
T Ausgabe von Werten des Typs double Java Basics - Anfänger-Themen 8
J Zuweisung von gesicherten Werten funktioniert nicht Java Basics - Anfänger-Themen 9
P Methoden Übergabe von Werten Java Basics - Anfänger-Themen 7
D Regex mit Werten aus txt Datei Java Basics - Anfänger-Themen 2
C Mit if Überprüfung von drei Werten durchführen Java Basics - Anfänger-Themen 6
C Comparator mit Double Werten? Java Basics - Anfänger-Themen 12
J Datentypen Fehler bei Berechnung mit Double und Int-Werten Java Basics - Anfänger-Themen 22
T Hashmap mit mehreren Werten Java Basics - Anfänger-Themen 9
F grafische Anzeige von Werten Java Basics - Anfänger-Themen 2
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
U Datentypen Ungenauigkeit von Double Werten Java Basics - Anfänger-Themen 5
L Datentypen Methode zum Abspeichern von Variablen mit größeren int-Werten Java Basics - Anfänger-Themen 6
Rudolf Datentypen Vectorliste mit Werten in zufälliger Anordnung Java Basics - Anfänger-Themen 5
1 Ständige Abfrage von Werten Java Basics - Anfänger-Themen 19
M Image zeichenen mit Double Werten Java Basics - Anfänger-Themen 4
S Minimum von 5 Werten Java Basics - Anfänger-Themen 6
H Checkbox mit Werten hinterlegen Java Basics - Anfänger-Themen 4
P Initialisierung einer 5*5 Matrix mit best. Werten Java Basics - Anfänger-Themen 2
M property mit mehreren werten Java Basics - Anfänger-Themen 3
F Speicherung von Werten?!? Java Basics - Anfänger-Themen 7
C ArrayList mit Integer Werten Java Basics - Anfänger-Themen 6
babel ein Vector mit verschiedenen Werten auslesen und berechnen Java Basics - Anfänger-Themen 34
S Elemente einer Liste mit true / false Werten Java Basics - Anfänger-Themen 3
X reele Zahlen zwischen zwei Werten addieren Java Basics - Anfänger-Themen 11
E Übergabe von werten aus einem JDialog Java Basics - Anfänger-Themen 4
G art hashmap mit mehreren werten pro key Java Basics - Anfänger-Themen 2
S Ausgabe von Werten Java Basics - Anfänger-Themen 25
D Brauche Hilfe: Funktion zum Kombinieren von Werten Java Basics - Anfänger-Themen 5
G Eintragen von Werten in die DB Java Basics - Anfänger-Themen 3
C Chart mit zwei Datenlinien und überlagernden Werten Java Basics - Anfänger-Themen 3
A Referenzen zu festen Werten machen? Java Basics - Anfänger-Themen 5
B 2d arrays mit Werten füllen Java Basics - Anfänger-Themen 22
M Problem bei der Übergabe von Werten Java Basics - Anfänger-Themen 7
W Funktionen mit Default werten Java Basics - Anfänger-Themen 10
A Probleme mit Ausgabe von Werten Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben