System.out.println("Betrachte "+stateId+" aus "+currentSet);
currChar = alphaIt.next();   destSet = new IntegerSet();
    public static FSA determ(FSA aut) {        FSA dfaResult = new FSA();                /* erstelle die Zustandsmenge des Automaten */        Set<Integer> tempSet;        IntegerSet stateSet;                stateSet = new IntegerSet();                tempSet = aut.getStates();                for ( Iterator<Integer> it = tempSet.iterator(); it.hasNext(); ) {            stateSet.insert(it.next());        }                // Potenzmenge davon berechnen        Vector<IntegerSet> statePowerSet;                statePowerSet = stateSet.getPowerset();                // aktuelle teilmenge der Potenzmenge        Vector<Integer> currentSet;        IntegerSet currentIntSet;                // eingabealphabet        Vector<Character> alpha;        Character currChar;                alpha = aut.getAlphabet();                // aktuelle Transitionsliste        LinkedList<Transition> transList;        Transition currTrans;                // der neue Zustand (==Zustandsmenge) im neuen Automaten        IntegerSet destSet;        int stateId; // der aktuell untersuchte (alte) Zustand                // nimm einen Zustand des neuen Automaten her... (also eine Teilmenge der Potmenge)        for ( Iterator<IntegerSet> psIt = statePowerSet.iterator(); psIt.hasNext();) {                        currentIntSet = psIt.next();                        // (TODO?) IntegerSet implementiert (noch) nicht Iterator            currentSet = currentIntSet.pureElements();            System.out.println("Untersuche Zustandsmenge "+currentSet);                        // eine spezielle Teilmenge der Potenzmenge, nmlich die leere            // Menge, wird gesondert behandelt, sie dient gewissermaen            // als Fangzustand            if (currentSet.isEmpty()) {                // fge fr alle Buchstaben die Transitionen ein die beim                // Zustand verbleibt                stateId = statePowerSet.indexOf(currentIntSet);                                for ( Iterator<Character> alphaIt = alpha.iterator(); alphaIt.hasNext(); ) {                    dfaResult.addTransition(stateId,stateId, alphaIt.next());                }            }                        // identifiziere die einelementige Menge die den alten Startzustand enthlt            // Annahme ist natrlich das es sich um DFAs handelt, die nur einen Startzustand            // haben drfen            if (currentIntSet.cardinality()==1 && aut.isStartState(currentIntSet.getFirst())) {                System.out.println("  --> "+currentIntSet+" ist das StartStateSet");                dfaResult.setStartFlag(statePowerSet.indexOf(currentIntSet), true);            }                        // durchlaufe die aktuelle Menge (=Zustand) ....            for ( Iterator<Integer> setIt = currentSet.iterator(); setIt.hasNext(); ) {                                stateId = setIt.next();                                System.out.println("Betrachte "+stateId+" aus "+currentSet);                                // besorge alle Transitionen dieses (alten) Zustands aus dem                // alten Automaten                transList = aut.getStateTransitions(stateId);                                // durchlaufe fr diesen Zustand alle Buchstaben des Eingabealphabets                for ( Iterator<Character> alphaIt = alpha.iterator(); alphaIt.hasNext(); ) {                    // lege eine neue (zunchst) leere Menge an, hier kommen                    // alle Zustnde hinein die von stateId mit currChar aus erreichbar sind                    destSet = new IntegerSet();                                        currChar = alphaIt.next();                    // betrachte nun die ausgehenden Transition dieses ZUstands im alten Aut.                    for ( Iterator<Transition> transIt = transList.iterator(); transIt.hasNext(); ) {                                                currTrans = transIt.next();                                                // gab es im alten Automaten eine Transition von stateId mit currChar                        // irgendwo anders hin, fge den jeweiligen Zielzustand in die                        // neue Zielzustandsmenge ein                        if (currTrans.getChar() == currChar && currTrans.getStartState()==stateId) {                            System.out.println("passende transition "+currTrans+" fr "+stateId+                                    "aus "+currentIntSet);                            destSet.insert(currTrans.getEndState());                                                   }                                            }                                        System.out.println(currentIntSet+" erreicht mit "+currChar+" "+destSet);                                       // ber den Index im Vector der Potenzmenge werden die einzelnen                    // Menge eindeutig identifiziert, hier wird die endgltige Transition eingefgt                    dfaResult.addTransition(statePowerSet.indexOf(currentIntSet),                            statePowerSet.indexOf(destSet),                            currChar);                                    }            }                    }                        // abschlieend bestimmen wir nun noch die neuen Endzustnde des Automaten        // dazu nehmen wir die ursprngliche Endzustandsmenge und schneiden mit        // jedem Element der Potenzmenge, ist der Schnitt nicht leer, ist der        // entsprechende Zustand (==Menge) ein endzustand im neuen Automat        // einfach gesagt, jede Zustandsmenge des Potenzautomaten die        // den einen alten Endzustand enthlt ist Endzustand.                IntegerSet oldFinalSet = aut.getFinalSet();                for ( Iterator<IntegerSet> it = statePowerSet.iterator(); it.hasNext(); ) {            currentIntSet = it.next();            currentIntSet.intersect(oldFinalSet);            if (!currentIntSet.isEmpty()) {                dfaResult.setFinalFlag(statePowerSet.indexOf(currentIntSet),  true);            }        }                // TODO        dfaResult.setName("myName");                // erzeuge die noch nicht vorhandenen Pixelpositionen der Zustnde        dfaResult = generatePositions(dfaResult);               // TODO        // die Determinisierung erzeugt viel redundanten / anderweitigen        // Unsinn (= sinnlose Zustnde und Transitionen)        // eine nachgelagerte Minimierung wre sinnvoll                return dfaResult;    }