skip to main content

kiesler.at

Variablen mit Hashtable verwalten
updated by rck, 2004-10-03

Beispiel 1186 der EPROG-Beispielsammlung lässt sich sehr schön mit einer Hashtable lösen. Es handelt sich hierbei um eine schlichte Variablenverwaltung für ganzzahlige Werte.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8

assign() -- merken von Variablen

assign ist der Kern unseres Programmes. Diese Methode vereint das Auslesen von Werten mit dem Schreiben von Werten in die Hashtable.


120         public static void assign(String s)
121                 throws Exception
122         {
123 
124                 int eq=s.indexOf('=');
125 
126                 if(eq<1)
127                         throw new Exception("'"+s+"' ist keine "+
128                                 "gültige Zuweisung!");
129 
130                 if(eq+1>s.length())
131                         throw new Exception("Zuweisung '"+s+"' ist "+
132                                 "leer!");
133 
134                 String name=s.substring(0, eq);
135                 Short wert=getWert(s.substring(eq+1));
136 
137                 checkName(name);
138 
139                 // Spezifikation sieht vor, dass nur max. 10 Variablen
140                 // verwendet werden können.
141 
142                 if(syms.put(name, wert) == null) {
143                         vars++;
144 
145                         if(vars>10)
146                                 throw new Exception("Es werden nur "+
147                                         "maximal 10 Variablen unterstützt, "+
148                                         name+" wäre Nummer 11.");
149                 }
150         }

Beschreibung von assign

124 wir merken uns zuerst, an welcher Stelle das '=' steht. Zur Erinnerung: Unsere Ausdrücke haben die Form NAME=WERT.

126-128 steht das = so weit vorne, dass sich da kein Variablenname mehr ausgeht, oder gibt's gar kein =, gibt's eine Exception.

130-132 geht sich nach dem = kein Wert mehr aus, ebenfalls.

134 mit substring bekommen wir den Teil vor dem = raus, das ist dann unser Name.

135 getWert() liefert gegebenenfalls die Eingegebene Konstante als Short zurück. Sollte der Benutzer einen Variablennamen als Wert angegeben haben, sieht getWert() in der Hashtable nach und liefert den passenden Wert.

137 hier prüfen wir, ob der Name unserer Spezifikation entspricht.

142-149 bei der Prüfung auf maximal 10 Variablen nutze ich eine Besonderheit der Hashtable. put liefert NULL zurück, falls der Schlüssel noch nicht existiert hat. und den alten Wert, falls der Schlüssel bereits existierte.

So können wir leicht mitzählen, wieviele Variablen bereits abgelegt wurden und gegebenenfalls eine Exception werfen.

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8



RSSComments - Make a comment
The comments are owned by the poster. We are not responsible for its content.
RSSAll Articles
2008, 2007, 2006, 2005, 2004