tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
447
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Sophie Sophie ist offline Rookie
    Registriert seit
    Jun 2010
    Beiträge
    8
    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?

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    
     
    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();
             }
    }
    Geändert von Sophie (20.06.10 um 20:30 Uhr) Grund: War etwas unuebersichtlich
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Zitat Zitat von Sophie Beitrag anzeigen
    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()
    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    stadt [ns] = Konsole.getInputString("Bitte geben Sie die nächste Stadt ein");
    if (!stadt [s].equals(stadt [ns])) {
        //
    }
    else {
        //
    }

    Ersetzen durch

    Code java:
    1
    2
    3
    4
    5
    
    while(!stadt [s].equals(stadt [ns])) {
        stadt [ns] = Konsole.getInputString("Bitte geben Sie die nächste Stadt ein");
        //
    }
    //
    Geändert von CPoly (20.06.10 um 20:36 Uhr)
     

  3. #3
    Sophie Sophie ist offline Rookie
    Registriert seit
    Jun 2010
    Beiträge
    8
    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.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    
     
    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();
             }
    }
     

  4. #4
    Avatar von Carron
    Carron Carron ist offline Mitglied Silber
    Registriert seit
    May 2010
    Ort
    Berlin
    Beiträge
    61
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    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:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    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
     

  5. #5
    Sophie Sophie ist offline Rookie
    Registriert seit
    Jun 2010
    Beiträge
    8
    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
     

  6. #6
    Avatar von snoopysalive
    snoopysalive snoopysalive ist offline Mitglied Silber
    Registriert seit
    Jun 2007
    Beiträge
    77
    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 :
    1
    2
    
    // 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
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 26.11.10, 11:08
  2. Arrays
    Von Lucien3000 im Forum Java
    Antworten: 4
    Letzter Beitrag: 12.02.07, 15:01
  3. Tabelle/Arrays und Arrays ausgeben
    Von Meitli im Forum ASP
    Antworten: 1
    Letzter Beitrag: 09.02.06, 13:01
  4. verzweifle an Arrays: Arrays veraendern
    Von supersalzi im Forum PHP
    Antworten: 6
    Letzter Beitrag: 01.06.05, 16:00
  5. Arrays
    Von horetio im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 19.05.05, 12:29