package homework02; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; public class Environment { private Environment prevEnv; private LinkedList keys; private LinkedList values; private HashMap myHashMap; public Environment() { this.keys = new LinkedList(); this.values = new LinkedList(); } public Environment(LinkedList paramKeys, Environment prevEnv) { this.prevEnv = prevEnv; this.keys = new LinkedList(); if (equalContent(paramKeys) == true) { System.out.println("the list has equal content"); System.exit(0); } else { System.out.println("the list is ok"); Iterator iter1 = paramKeys.listIterator(); while (iter1.hasNext()) { Symbol s = (Symbol) iter1.next(); this.keys.add(s); } } } public static boolean equalContent(LinkedList paramKeys) { int cnt = 0; for (int i = 0; i < paramKeys.size(); i++) { Symbol s = paramKeys.get(i); for (int j = i; j < paramKeys.size(); j++) { Symbol t = paramKeys.get(j); if (s.toString().equals(t.toString())) { cnt++; } } if (cnt >= 2) { System.out.println("doppelt:" + s); return true; } cnt = 0; } return false; } public void bind(LinkedList paramValues) { this.values = new LinkedList(); this.myHashMap = new HashMap(); if (this.keys.size() == paramValues.size()) { System.out.println("beide listen gleiche größe.."); } else { System.out.println("größe ungleich.."); System.exit(0); } Iterator iter1 = paramValues.listIterator(); while (iter1.hasNext()) { Object s = (Object) iter1.next(); this.values.add(s); } for (int i = 0; i < this.keys.size(); i++) { Symbol s = (Symbol) this.keys.get(i); Object o = (Object) this.values.get(i); this.myHashMap.put(s, o); } } public Object lookup(Symbol paramKey){ if (this.prevEnv == null) { System.out.println("sorry, nix da"); } else { if (this.myHashMap.get(paramKey) == null) { System.out.println(this.myHashMap.get(paramKey)); System.out.println("hier null"); this.prevEnv.lookup(paramKey); } else { System.out.println("param gefunden: " + this.myHashMap.get(paramKey)); return this.myHashMap.get(paramKey); } } return null; } }