Arrays

Sophie

Grünschnabel
Guten Abend Zusammen

Ich habe hier einen Quellcode und komme einfach nicht weiter.
Eigentlich sollte solange nach einer nächsten Stadt gefragt werden, bis die Startstadt wieder eingegeben wird. Aber das Programm bricht nach der Eingabe der 2. Stadt ab. Könnt Ihr mir vielleicht einen Tip geben, woran das liegt?

Java:
public class Route {
    
     
    // (0)AAchen, (1)Berlin, (2)Chemnitz, (3)Dresden, (4)Erfurt, (5)Flensburg, (6)Garmisch, (7)Hamburg  
 
         int[][] entfernung = {
         {000, 640, 580, 650, 440, 649, 735, 490},      //(0)Aachen
         {640, 000, 260, 190, 300, 450, 671, 290},      //(1)Berlin
         {580, 260, 000, 70, 150, 670, 480, 520},       //(2)Chemnitz
         {650, 190, 70, 000, 220, 650, 610, 502},       //(3)Dresden
         {440, 300, 150, 220, 000, 550, 490, 400},      //(4)Erfurt
         {649, 450, 670, 650, 550, 000, 1020, 160},     //(5)Flensburg
         {735, 671, 480, 610, 490, 1020, 000, 869},     //(6)Garmisch
         {490, 290, 520, 502, 400, 160, 869, 000}       //(7)Hamburg
          };
         
         
         
         //Array in dem die Staede gespeichert sind.
         String[] stadt = new String[8]; {
                 
                 stadt[0] = ("Aachen");
                 stadt[1] = ("Berlin");
                 stadt[2] = ("Chemnitz");
                 stadt[3] = ("Dresden");
                 stadt[4] = ("Erfurt");
                 stadt[5] = ("Flensburg");
                 stadt[6] = ("Garmisch");
                 stadt[7] = ("Hamburg"); }

        
         
         /*Methode anbieten
          * der Benutzer kann wählen, ob er die Standartroute, 
          * oder die vorgegebene Route möchte
          */
         
         
         public final void anbieten() {                 
             
                     
             
             System.out.println("Staedte: Aachen, Berlin, Chemnitz, Dresden, "           //zeigt die verfügbaren Städte an
                                        + "Erfurt, Flensburg, Garmisch, Hamburg");
             
           
       // Auswahl der Städteliste mit Hilfe der Konsole              
 
             String antwort;
                 antwort = Konsole. getInputString("Moechten Sie diese Staedteliste nutzen? j/n");
                 
                 if (antwort.equals("j")){                          //Bei Eingabe "j" wird die Standartroute ausgegeben
                 
                     System.out.println ("Antwort: " + antwort);
                     alleDaten ();
                 }
                 
                 else if (antwort.equals("n")){                    //Bei Eingabe "n" wird die Methode "list" ausgeführt
                                                                   //Der Benutzer kann seine eigene Route zusammenstellen
                     
                     list ();
 
                                                                                                                
                                   }
                 else {                                                   //Wird weder "j" noch "n" eingegeben wird mitgeteilt, dass
                     System.out.println("Bitte geben Sie j oder n ein");  // Eingabe ungültig ist, eine erneute Eingabe ist möglich
                     
                     antwort = Konsole. getInputString("Moechten Sie diese Staedteliste nutzen? j/n");
                 
                 }
          }
         

 
         public int standardroute(){ 
             
             int summe =                  //Berechnung der Kilometeranzahl der Standartroute
            
             (entfernung[1][6]+
             entfernung[6][7]+            //Die Felder des Arrays werden nach vorgegebener Reihenfolge summiert
             entfernung[7][3]+
             entfernung[3][6]+
             entfernung[6][0]+
             entfernung[0][5]+
             entfernung[5][1]);
             
             return summe;
         }
  
 
         public void alleDaten(){         // Route wird übersichtlich auf der Konsole ausgegeben
         
         
             System.out.println("Start: Berlin");
             System.out.println("Von Berlin nach Garmisch: " + entfernung[1][6] + "km.");
             System.out.println("Von Garmisch nach Hamburg: " + entfernung[6][7] + "km.");
             System.out.println("Von Hamburg nach Dresden: " + entfernung[7][3] + "km.");
             System.out.println("Von Dresden nach Garmisch: " + entfernung[3][6] + "km.");
             System.out.println("Von Garmisch nach Aachen: " + entfernung[6][0] + "km.");
             System.out.println("Von Aachen nach Flensburg: " + entfernung[0][5] + "km.");
             System.out.println("Von Flensburg nach Berlin: " + entfernung[5][1] + "km.");
             System.out.println("Gesamtstrecke: " + standardroute());
                     
         }

         
         
         
         //Methode zum erstellen einer eigenen Route
         
         
         public void list() {
             
                  
           
            int s = 0;     //Start
            int ns = 0;    //naechste Stadt
            int ls = 0;    //letzte Stadt
            int strecke = 0;
            
			stadt [s] = Konsole.getInputString("Bitte geben Sie die Startstadt ein.");

            System.out.println("Staedte: Aachen, Berlin, Chemnitz, Dresden, "
                                + "Erfurt, Flensburg, Garmisch, Hamburg");
                                     
            stadt [ls] = stadt [s];                                //die Route wird mit der 1. Stadt beendet
             System.out.println("Start in: " + stadt [s]);
             
                                 
                	
					stadt [ns] = Konsole.getInputString("Bitte geben Sie die nächste Stadt ein");

					             
									
					if (!stadt [s].equals(stadt [ns])) {                 // es können so lange Städt eingegeben werden, bis die
		                                                                  // 1. Stadt eingegeben wird
                        
                     
                     // übersichtliche Ausgabe der Auswahl für den Benutzer auf der Konsole
					
					                 
                     System.out.println("Von " + stadt [ls] + " nach " + stadt [ns]);
                    
                     // Entfernung zwischen den beiden Städten wird als Zwischensumme berechnet
                     // und auf der Konsole ausgegeben
                   int i = Integer.valueOf(stadt [ls]);
                   int j = Integer.valueOf(stadt [ns]);
                     
                   
                   
                  System.out.println(entfernung[i][j] + " km.");    
                     
                     // Die gesamten Zwischensummen der Entfernungen werden summiert
                   strecke = strecke + entfernung[i][j];       
                     
                      
                     
					stadt [ls] = stadt [ns];                          // es wird immer die zuletzt eingegebene Stadt
                                                                           // mit der aktuellen Stadt ausgegeben und berechnet
						 } 
                     
					  else  {                                               //wenn der Benutzer die Startstadt eingibt, wird die
                      System.out.println("Gesamtstrecke: " + strecke);     //Eingabe beendet und die Kilometerzahl der gesamten
                                                                           //Strecke ausgegeben
                    
                     
                    }
           
     }

         //Die Methoden werden getestet
                     
         public static void main(String[] args) {
             Route test = new Route();
             test.anbieten();
         }
}
 
Zuletzt bearbeitet:
Eigentlich sollte solange nach einer nächsten Stadt gefragt werden, bis die Startstadt wieder eingegeben wird.

Dein Quelltext enthält keine Schleife, also wie sollte da etwas mehrfach durchgeführt werden (abgesehen von Rekursion)?


Und hier noch ein Vorschlag (ohne deinen Code näher angesehen zu haben). In der Methode list()
Java:
stadt [ns] = Konsole.getInputString("Bitte geben Sie die nächste Stadt ein");
if (!stadt [s].equals(stadt [ns])) {
    //
}
else {
    //
}

Ersetzen durch

Java:
while(!stadt [s].equals(stadt [ns])) {
    stadt [ns] = Konsole.getInputString("Bitte geben Sie die nächste Stadt ein");
    //
}
//
 
Zuletzt bearbeitet:
Oh, sorry, ich hatte eine Schleife.
Ich probiere nur schon so lange eine Lösung zu finden, dass ich die wohl irgendwann versehentlich gelöscht habe. Zeile 133
Es funktioniert aber auch nicht mit dieser Schleife.

Java:
public class Route {
    
     
    // (0)AAchen, (1)Berlin, (2)Chemnitz, (3)Dresden, (4)Erfurt, (5)Flensburg, (6)Garmisch, (7)Hamburg  
 
         int[][] entfernung = {
         {000, 640, 580, 650, 440, 649, 735, 490},      //(0)Aachen
         {640, 000, 260, 190, 300, 450, 671, 290},      //(1)Berlin
         {580, 260, 000, 70, 150, 670, 480, 520},       //(2)Chemnitz
         {650, 190, 70, 000, 220, 650, 610, 502},       //(3)Dresden
         {440, 300, 150, 220, 000, 550, 490, 400},      //(4)Erfurt
         {649, 450, 670, 650, 550, 000, 1020, 160},     //(5)Flensburg
         {735, 671, 480, 610, 490, 1020, 000, 869},     //(6)Garmisch
         {490, 290, 520, 502, 400, 160, 869, 000}       //(7)Hamburg
          };
         
         
         
         //Array in dem die Staede gespeichert sind.
         String[] stadt = new String[8]; {
                 
                 stadt[0] = ("Aachen");
                 stadt[1] = ("Berlin");
                 stadt[2] = ("Chemnitz");
                 stadt[3] = ("Dresden");
                 stadt[4] = ("Erfurt");
                 stadt[5] = ("Flensburg");
                 stadt[6] = ("Garmisch");
                 stadt[7] = ("Hamburg"); }

        
         
         /*Methode anbieten
          * der Benutzer kann wählen, ob er die Standartroute, 
          * oder die vorgegebene Route möchte
          */
         
         
         public final void anbieten() {                 
             
                     
             
             System.out.println("Staedte: Aachen, Berlin, Chemnitz, Dresden, "           //zeigt die verfügbaren Städte an
                                        + "Erfurt, Flensburg, Garmisch, Hamburg");
             
           
       // Auswahl der Städteliste mit Hilfe der Konsole              
 
             String antwort;
                 antwort = Konsole. getInputString("Moechten Sie diese Staedteliste nutzen? j/n");
                 
                 if (antwort.equals("j")){                          //Bei Eingabe "j" wird die Standartroute ausgegeben
                 
                     System.out.println ("Antwort: " + antwort);
                     alleDaten ();
                 }
                 
                 else if (antwort.equals("n")){                    //Bei Eingabe "n" wird die Methode "list" ausgeführt
                                                                   //Der Benutzer kann seine eigene Route zusammenstellen
                     
                     list ();
 
                                                                                                                
                                   }
                 else {                                                   //Wird weder "j" noch "n" eingegeben wird mitgeteilt, dass
                     System.out.println("Bitte geben Sie j oder n ein");  // Eingabe ungültig ist, eine erneute Eingabe ist möglich
                     
                     antwort = Konsole. getInputString("Moechten Sie diese Staedteliste nutzen? j/n");
                 
                 }
          }
         

 
         public int standardroute(){ 
             
             int summe =                  //Berechnung der Kilometeranzahl der Standartroute
            
             (entfernung[1][6]+
             entfernung[6][7]+            //Die Felder des Arrays werden nach vorgegebener Reihenfolge summiert
             entfernung[7][3]+
             entfernung[3][6]+
             entfernung[6][0]+
             entfernung[0][5]+
             entfernung[5][1]);
             
             return summe;
         }
  
 
         public void alleDaten(){         // Route wird übersichtlich auf der Konsole ausgegeben
         
         
             System.out.println("Start: Berlin");
             System.out.println("Von Berlin nach Garmisch: " + entfernung[1][6] + "km.");
             System.out.println("Von Garmisch nach Hamburg: " + entfernung[6][7] + "km.");
             System.out.println("Von Hamburg nach Dresden: " + entfernung[7][3] + "km.");
             System.out.println("Von Dresden nach Garmisch: " + entfernung[3][6] + "km.");
             System.out.println("Von Garmisch nach Aachen: " + entfernung[6][0] + "km.");
             System.out.println("Von Aachen nach Flensburg: " + entfernung[0][5] + "km.");
             System.out.println("Von Flensburg nach Berlin: " + entfernung[5][1] + "km.");
             System.out.println("Gesamtstrecke: " + standardroute());
                     
         }

         
         
         
         //Methode zum erstellen einer eigenen Route
         
         
         public void list() {
             
                  
           
            int s = 0;     //Start
            int ns = 0;    //naechste Stadt
            int ls = 0;    //letzte Stadt
            int strecke = 0;
            
			stadt [s] = Konsole.getInputString("Bitte geben Sie die Startstadt ein.");

            System.out.println("Staedte: Aachen, Berlin, Chemnitz, Dresden, "
                                + "Erfurt, Flensburg, Garmisch, Hamburg");
                                     
            stadt [ls] = stadt [s];                                //die Route wird mit der 1. Stadt beendet
             System.out.println("Start in: " + stadt [s]);
             
                                 
                	
					stadt [ns] = Konsole.getInputString("Bitte geben Sie die nächste Stadt ein");
                          
					for (int wdh = 0; wdh <= stadt.length; wdh++)
					             
									
					if (!stadt [s].equals(stadt [ns])) {                 // es können so lange Städt eingegeben werden, bis die
		                                                                  // 1. Stadt eingegeben wird
                        
                     
                     // übersichtliche Ausgabe der Auswahl für den Benutzer auf der Konsole
					
					                 
                     System.out.println("Von " + stadt [ls] + " nach " + stadt [ns]);
                    
                     // Entfernung zwischen den beiden Städten wird als Zwischensumme berechnet
                     // und auf der Konsole ausgegeben
                   int i = Integer.valueOf(stadt [ls]);
                   int j = Integer.valueOf(stadt [ns]);
                     
                   
                   
                  System.out.println(entfernung[i][j] + " km.");    
                     
                     // Die gesamten Zwischensummen der Entfernungen werden summiert
                   strecke = strecke + entfernung[i][j];       
                     
                      
                     
					stadt [ls] = stadt [ns];                          // es wird immer die zuletzt eingegebene Stadt
                                                                           // mit der aktuellen Stadt ausgegeben und berechnet
						 } 
                     
					  else  {                                               //wenn der Benutzer die Startstadt eingibt, wird die
                      System.out.println("Gesamtstrecke: " + strecke);     //Eingabe beendet und die Kilometerzahl der gesamten
                                                                           //Strecke ausgegeben
                    
                     
                    }
           
     }

         //Die Methoden werden getestet
                     
         public static void main(String[] args) {
             Route test = new Route();
             test.anbieten();
         }
}
 
Hi Sophie,

wenn du in Zeile 131 um die EIngabe der nächsten Stadt bittest und erst ab Zeile 133 deine Schleife ansetzt, wird Zeile 131 selbstverständlich nur einmalig zur Ausführung gebracht.

Darüber hinaus würde ich von CPoly angebotene while-Schleife nutzen, da deine Zählschleife ja doch wieder nach einigen Durchläufen beendet wird.

Außerdem sehe ich nicht, wo deine Zählvariablen erhöht werden.

der Code:
Java:
int s = 0;     //Start
int ns = 0;    //naechste Stadt
int ls = 0;    //letzte Stadt
int strecke = 0;

stadt [s] = Konsole.getInputString("Bitte geben Sie die Startstadt ein.");

System.out.println("Staedte: Aachen, Berlin, Chemnitz, Dresden, Erfurt, Flensburg, Garmisch, Hamburg");

stadt [ls] = stadt [s];                                //die Route wird mit der 1. Stadt beendet
System.out.println("Start in: " + stadt [s]);

stadt [ns] = Konsole.getInputString("Bitte geben Sie die nächste Stadt ein");
                          
for (int wdh = 0; wdh <= stadt.length; wdh++)
    if (!stadt [s].equals(stadt [ns]))
        ...

tut also nicht anders als:

Java:
stadt [0] = Konsole.getInputString("Bitte geben Sie die Startstadt ein.");
stadt [0] = stadt [0];
stadt [0] = Konsole.getInputString("Bitte geben Sie die nächste Stadt ein");

for (int wdh = 0; wdh <= stadt.length; wdh++)
    if (!stadt [0].equals(stadt [0]))
        ...

und da du immer auf das selbe Element deines Arrays schreibst (was meines Erachtens eigentlich gar nicht beschrieben werden sollte, weil du doch dort die Städtenamen vorhälst), führt das Ganze in der if-Abfrage natürlich immer zu einer Übereinstimmung und zweitens zu einem inhaltlichen Chaos, dass du vermutlich gar nicht bezweckst ;)


Viele Grüße
Carron
 
Du meine Güte!

Also mein eigentliches Anliegen ist, dass anstatt wie im 1. Quellcode die Städt durch Nummern eingegeben werden, die Städtenamen eingegeben werden können.
Kann mir vielleicht jemand erklären, wie ich das am Besten angehe?
(Was ich zwischenzeitlich ausprobiert habe ist, dass ich nach der Eingabe in die Konsole den String stadt mittels Integer.valueof (...) wieder in einen Integerwert zurückverwandle, dass geht aber auch mächtig schief)

Danke und Gruss
Sophie
 
Hallo!

Also, dein Programm soll nach einer Start- und nach einer End-Stadt fragen, oder? Wurden die beiden Städte eingegeben (nicht als Index-Zahlen, sondern als Reintext), soll ausgegeben werden, wie weit sie voneinander entfernt liegen, richtig? Und abgebrochen wird, wenn als End-Stadt die Start-Stadt eingegeben worden ist?

Mal unabhängig von den Rahmenbedingungen: Warum implementierst du die Städtedistanzen denn nicht mit einer HashMap? Dann sparst du dir das elendige Array-Durchlaufen mit Schleifen und musst auch nicht von Städtenamen auf Indizes mappen. Eine HashMap<String, HashMap<String, Integer>> würde dir die Abfrage deutlich erleichtern.

Code:
// Pseudo
entfernungen.get("Aachen").get("Berlin") => 640

Ich hab diese Alternative mal implementiert. Wenn du willst, poste ich dir den Quellcode gerne hier herein.

Gruß
Matthias
 

Neue Beiträge

Zurück