count++;  progress = (count*100)/pSetSize;
    public static GenericAlgorithm determ(final FSA aut) {        GenericAlgorithm determAlgo;                determAlgo = new GenericAlgorithm() {                        private FSA dfaResult;                                    public void runAlgorithm() {                                dfaResult = new FSA();                                /* erstelle die Zustandsmenge des Automaten */                Set<Integer> tempSet;                IntegerSet stateSet;                                stateSet = new IntegerSet();                                for ( Integer i : aut.getStates() ) {                    stateSet.insert(i);                }                                // Potenzmenge davon berechnen                Vector<IntegerSet> statePowerSet;                                //waitDlg.setCurrentStep("calculating powerset");                statePowerSet = stateSet.getPowerset();                                // aktuelle teilmenge der Potenzmenge                Vector<Integer> currentSet;                                // eingabealphabet                Vector<Character> alpha;                                alpha = aut.getAlphabet();                                // aktuelle Transitionsliste                LinkedList<Transition> transList;                                // der neue Zustand (==Zustandsmenge) im neuen Automaten                IntegerSet destSet;                int stateId;                                int progress,count = -1,pSetSize = statePowerSet.size();                                // nimm einen Zustand des neuen Automaten her... (also eine Teilmenge der Potmenge)                for ( IntegerSet currentIntSet : statePowerSet ) {                                        count++;                                        progress = (count*100)/pSetSize;                                        //  waitDlg.setProgress(progress);                    //  waitDlg.setCurrentStep("checking set "+count+" of "+pSetSize);                                        // (TODO?) IntegerSet implementiert (noch) nicht Iterator                    currentSet = currentIntSet.pureElements();                                        // 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 ( Character cChar : alpha ) {                            dfaResult.addTransition(stateId,stateId, cChar);                        }                                                continue;                    }                                        // durchlaufe fr diesen Zustand alle Buchstaben des Eingabealphabets                    for ( Character currChar : alpha ) {                                                // lege eine neue (zunchst) leere Menge an, hier kommen                        // alle Zustnde hinein die von stateId mit currChar aus erreichbar sind                        destSet = new IntegerSet();                                                // durchlaufe die aktuelle Menge (=Zustand) ....                        for ( Integer stId : currentSet ) {                                                        // besorge alle Transitionen dieses (alten) Zustands aus dem                            // alten Automaten                            transList = aut.getStateTransitions(stId);                                                        if (transList==null) continue;                                                        // betrachte nun die ausgehenden Transition dieses ZUstands im alten Aut.                            for ( Transition t : transList ) {                                                                // gab es im alten Automaten eine Transition von stateId mit currChar                                // irgendwo anders hin, fge den jeweiligen Zielzustand in die                                // neue Zielzustandsmenge ein                                if (t.getChar() == currChar && t.getStartState()==stId) {                                    destSet.insert(t.getEndState());                                                                    }                                                            }                                                        // 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);                    }                                    }                                // bestimme den neuen Startzustand des Automaten                // der neue Startzustand ist jene Zustandsmenge, welche alle alten                // Startzustnde enthlt, die Potenzmenge wird danach durchsucht                // wird auch in der schleife weiter unten getan                IntegerSet oldStartSet = aut.getStartSet();                                // 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();                                IntegerSet myClone;                                for ( IntegerSet currentIntSet : statePowerSet ) {                                        // bevor wir hier rumschneiden, erst schauen ob das nicht                    // der neue Startzustand ist                    if (currentIntSet.equals(oldStartSet)) {                        dfaResult.setStartFlag(statePowerSet.indexOf(currentIntSet), true);                    }                                        myClone = (IntegerSet)currentIntSet.clone();                                        myClone.intersect(oldFinalSet);                                        if (!myClone.isEmpty()) {                        dfaResult.setFinalFlag(statePowerSet.indexOf(currentIntSet),  true);                    }                }                                // erzeuge die noch nicht vorhandenen Pixelpositionen der Zustnde                dfaResult = generatePositions(dfaResult);                                // ein wenig Minimierung ohne den User zu fragen ;)                // knnte man als optional einbauen                dfaResult = removeIsolatedStates(dfaResult);                            } // runAlgo                        public Object getResult() { return dfaResult; }                                }; // new GenericAlgorithm                return determAlgo;    }