Collections

Status
Nicht offen für weitere Antworten.

scaary

Bekanntes Mitglied
Hallo.

Ich hab eine Frage zu Collections.
Vorneweg: Ja, ich habe die API durchgelesen und mich sowohl hier als auch in anderen Foren umgesehen.

Kurz zur Aufgabe:

Wir sollen einen Nichtdeterministischen endlichen Automaten implementieren. Das ist soweit nicht das Problem. Jedoch haben wir Vorgaben bekommen, die mich echt verzweifeln lassen.

Derzeit haenge ich an folgendem Stueck code, der vorgegeben ist:

private List<Collection<Transition>> charAdj = new ArrayList<Colleciton<Transition>>(ALPHABET_LENGTH + 1);

Transition ist eine von mir erstellte Klasse, die einfach nur 3 Werte speichert.

Ich weiss allerdings nichts mit dem gegebenen Code anzufangen. Offensichtlich ist es eine Liste :) So viel weiss ich. Aber ich kann nichts mit diesem Teil anfangen <Collection<Transition>>. Was bedeutet das? Dass in der Liste eine Collection von Transitionen gespeichert ist???? Und wie zum Henker greif ich auf den Kram zu??

Eigentlich muesste ich da eine Liste haben, in de ich sowohl chars als auch Listen von Transitionen speichern kann, ich hab aber einfach keinen Dunst wie man das macht :(


Weiss da jemand Rat?

Ausserdem hab ich noch folgende Funktion vorgegeben:

Collection<State> getTargets(char Symbol)

Das heisst, ich bekomme einen char uebergeben, durchsuche die Collection nach dem Char, und gebe dann eine Collection mit allen objekten zurueck, in der der char enthalten ist, korrekt?
 

Landei

Top Contributor
Du hast eine Liste von Collections, in denen Transaktionen gespeichert sind. Collection ist ein sehr allgemeines Interface (z.B. gibt es keinen wahlfreien Zugriff), aber zumindest ist es iterierbar, weswegen z.B. einfach folgendes geht:
Java:
List<Collection<Transition>> list = sonswoher();
for(Collection<Transition> col : list) {
    System.out.println("Transitions:");
    for(Transition trans : col) {
        System.out.println(trans);
    }
}
 

scaary

Bekanntes Mitglied
Ah, vielen Dank fuer die schnelle Antwort.

D.h. Also, dass ich in folgendem Beispiel

int ALPHABET_LENGTH = 26;

List<Collection<Transition>> charAdj = new ArrayList<Collection<Transition>> (ALPHABET_LENGTH + 1);

eine Liste mit 27 Stellen habe, die an jeder dieser Stellen Transitionen speichert, richtig?
 

diggaa1984

Top Contributor
nein, du hast eine Liste mit 27 Elementen. Diese Elemente sind Collections von Transitionen, wenn ich Collections mal als Menge bezeichne, hast also 27 versch. Mengen von Transitionen. Verschieden im Sinne von versch. Objekte, die können sich deswegen aber immer noch im mathematischen Sinne überschneiden etc.

Vielleicht wäre es aufschlussreicher die Richtigkeit deiner Gedanken zu prüfen indem du uns ne Beschreibung der Funktionen zeigst. Ich vermute mal da gabs doch bestimmt ne schriftliche Erklärung was welche Funktionen zu tun haben (betrifft zB die Sache mit den getTargets)
 

scaary

Bekanntes Mitglied
Ahh, also hab ich eine 27.ig stellige Liste die Listen von Transitionen enthaelt (nicht oder)?
Naja, die Beschreibung hierfuer halt sich sehr in Grenzen (vor allem will ich natuerlich auch nicht durchfallen, sprich ich will mir hier nur Hilfen und keinen fertigen code holen ^^):

Automat als Graph mit Adjazenzlistendarstellung abgespeichert
Klasse für Automat
Kennt alle Zustände
Weiß welcher der Startzustand ist

Klasse für Zustand (state)
Jeder Zustand kennt seine ausgehenden Transitionen
Kollisionsfreies Hashing nach dem Symbol
private List<Collection<Transition>> charAdj
= new ArrayList<Collection<Transition>>(ALPHABET_LENGTH + 1);
Collection<State> getTargets(char symbol) evtl. in O(deg(q))

Klasse für Transition

Java:
public class Transition implements Comparable<Transition> {
...
/** ...
**
@return -1 if {@code this < trans}, 0 if equal, and 1 if
* {@code this > trans}.
*/
@Override
public int compareTo(Transition trans) {
...
}
}

Oder wolltest du was anderes haben?

Danke nochmals!!
 
Zuletzt bearbeitet von einem Moderator:

diggaa1984

Top Contributor
Klasse für Zustand (state)
Jeder Zustand kennt seine ausgehenden Transitionen
Kollisionsfreies Hashing nach dem Symbol
private List<Collection<Transition>> charAdj
= new ArrayList<Collection<Transition>>(ALPHABET_LENGTH + 1);
Collection<State> getTargets(char symbol) evtl. in O(deg(q))

ah das was sich dahinter versteckt hatte ich dann doch grob geahnt.
Also in deiner Zustandsklasse hast eben diese Liste, welche dir zu jeder möglichen Eingabe im Automat ne Menge von Transitionen speichert, welche genau aus diesem Zustand mit der erfolgten Eingabe ausführbar sind. Und da spiegelt sich in meinen Augen auch der nicht-Determinismus wieder, denn man kann für jede Eingabe mehrere Transitionen haben.

und das getTargets sagt dir nun, welche Zustände du aus diesem Zustand bei Eingabe symbol erreichen kannst. Da nicht-deterministisch können es auch mehrere Zustände sein, die du mit der selben Eingabe erreichst, daher auch hier eine Collection als Rückgabe.

Kennen die Transitionen ihre Anfangs und End-States? Weil das wäre ganz praktisch um aus der Liste<Collection<Transitionen>> mit dem symbol zu ermitteln welche Folgezustände es gibt. Sollte das der Fall sein, dann suchst du dir in der Liste die Collection zum symbol heraus .. und ermittelst dann von jeder Transition den Zielzustand und gibst diese gesammelt zurück.
 
Zuletzt bearbeitet:

scaary

Bekanntes Mitglied
Japp, die kennen die Anfangs und End Zustaende ^^


Ahh, sowas hab ich dann geahnt, dann hab ich das zumindest richtig gemacht :)


Hey, also nochmals, super vielen lieben Dank, du hast mir echt SEHR geholfen!!

Wenn ich dihc jetzt vllt noch mit einer Kleinigkeit belaestigen duerfte ^^

Und Zwar:

Wie Greife ich auf die einzelnen Transitionen die in den Collections gespeichert sind zu?

Den Zugriff auf die Collections hab ich mittels Iteratoren meines Erachtens nach hinbekommen:


Jetzt hab ich folgende Funktion, die soll eine Transition in die Collection (welche sich inder Liste charAdj befindet) einfuegen:

Java:
    void addTransition(Transition trans, char symbol) {
        int position = letterPositionInList(Character.toString(symbol));

        Iterator iter = charAdj.iterator();

        for(int i = 0; iter.hasNext(); ++i) {
            if (i == position) {
                   
            }
        }
    }

Ist warscheinlich nur ne winzige Kleinigkeit, aber wie greife ich jetzt auf die gewuenschte Transition in der Collection zu?

DANKE!
 
Zuletzt bearbeitet von einem Moderator:

scaary

Bekanntes Mitglied
Ja, das hab ich soweit gewusst. Nur versteh ich nicht ganz, wie ich den Iterator aufrufen kann.

Ich lauf ja mit meiner Funktion solange durch, bis ich das entsprechende Objekt (spricjh die entsprechende Collection) in meiner Liste finde.

Wie mache ich denn fuer die entsprechende Collection jetzt noch nen Iterator?

Ich hatte es jetzt so versucht:
Iterator iter2 = iter.iterator();

Jedoch sagt eclipse mir, dass ich so casten muss:
Iterator iter2 = ((List<Collection<Transition>>) iter).iterator();

Ist das korrekt?
 

diggaa1984

Top Contributor
Jetzt hab ich folgende Funktion, die soll eine Transition in die Collection (welche sich inder Liste charAdj befindet) einfuegen:

Java:
public void addTransition(Transition trans, char symbol) {
    int position = letterPositionInList(Character.toString(symbol));

    Collection<Transition> c = charAdj.get(position);
    c.add(trans);
}

sofern dieses mapping von position 100% passt, brauchst nich mehr zu tun .. denk ich :oops:
 
Zuletzt bearbeitet:

scaary

Bekanntes Mitglied
AHHH, ich verstehe, ich hab versucht das PFerd von hinten aufzusatteln ^^

Das macht Sinn! Danke Dir!!
 

scaary

Bekanntes Mitglied
Hey,

ich hab schon wieder nen Problemchen mit den Collections.. :(


Naja, auf jeden fall hab ich folgenden Code geschrieben, der mir eine Arraylist, in der sich collections von Transitionen befinden in einen String umschreiben soll:

Java:
    public String toString() {
        String result = "";

        for (int i = 0; i < list.length; ++i) {
            List<Collection<Transition>> c = list[i].getCollection();
            for(int j = 0; j < c.size(); ++j) {
                Collection<Transition> tmp = c.get(j);
                Iterator iter = tmp.iterator();
                for(int k = 0; iter.hasNext(); ++i) {


                    Transition trans = iter;


                    result = result + "(" + (i + 1) + ", " 
                    + trans.getNumberTarget() + ")" + trans.getSymbol() + "\n";
                }
            }
        }
        return result;
    }
Wobei das Problem bei folgendem Teil liegt:

Transition trans = iter;

Bei dem will ich ja eigentlich auf die in der Kollektion befindlichen Transition nacheinander zugreifen und die entsprechenden Werte rausziehen. NUR laesst er mich nicht :(

Description Resource Path Location Type
Type mismatch: cannot convert from Iterator to Transition NDA.java ND Automat/src/fa line 51 Java Problem


Wie greife ich jetzt also auf den inhalt der Transitionen nacheinander zu???

Danke!
 
Zuletzt bearbeitet von einem Moderator:

Landei

Top Contributor
Au Mann!
- Nimm bitte, bitte im Forum [java] Tags
- Schau dir ein paar Beispiele aus dem Netz an, die Iteratoren benutzen. Es kann doch nicht so furchtbar schwer sein, die Geheimnisse von next und hasNext zu ergründen
- Strings nicht in einer Schleife addieren (außer die Anzahl Durchläufe ist vorher bekannt und klein), dafür gibt es StringBuilder

Java:
@Override
public String toString() {
  StringBuilder result = new StringBuilder();
  for (int i = 0; i < list.length; ++i) {
     for(List<Collection<Transition>> c : list[i].getCollection()) {
        for(Transition trans : c.get(j)) {
            result.append("(").append(i + 1).append(", ").append(trans.getNumberTarget()).append(")").append(trans.getSymbol()).append("\n");           
        }
     }
   }
  return result.toString();
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Sortierung in collections testen Java Basics - Anfänger-Themen 11
X Collections.sort als Lambda Java Basics - Anfänger-Themen 14
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
O Collections.sort und List.sort mit Lambda Verwirrung Java Basics - Anfänger-Themen 5
B Collections.sort mit zwei Bedingungen? Java Basics - Anfänger-Themen 4
I Collections.shuffle funktioniert nicht Java Basics - Anfänger-Themen 1
M Collections Frage Java Basics - Anfänger-Themen 1
D Methoden Collections.shuffle mit bestimmtem Startwert? Java Basics - Anfänger-Themen 8
T Java Collections Java Basics - Anfänger-Themen 58
X Collections Collections Maps Frage Java Basics - Anfänger-Themen 4
C Collections: private Map Java Basics - Anfänger-Themen 4
V Collections Java Basics - Anfänger-Themen 3
A Collections Java Basics - Anfänger-Themen 2
P collections.sort Java Basics - Anfänger-Themen 2
R Iterationsreihenfolge über Collections Java Basics - Anfänger-Themen 4
S Klassen Collections Java Basics - Anfänger-Themen 10
J Polymorphie Iteratoren statt Collections Java Basics - Anfänger-Themen 13
H Etwas wie sort() / sorted() in JAVA-Collections? Java Basics - Anfänger-Themen 5
F Collections ArrayList oder Hashmap mittel Collections.sychronised Java Basics - Anfänger-Themen 6
S Bestimmte Objekte aus Collections anwählen/herausbekommen Java Basics - Anfänger-Themen 8
M Collections mit >2 type Parametern? Java Basics - Anfänger-Themen 8
S Frage zu Collections.frequency() Java Basics - Anfänger-Themen 3
T Collections Übersicht Collections Java Basics - Anfänger-Themen 4
X Collections Inhalt von zwei Collections prüfen Java Basics - Anfänger-Themen 4
A Generische Collections und Vererbung Java Basics - Anfänger-Themen 2
K Telefonbuch Implementation mit Java Collections Java Basics - Anfänger-Themen 4
G Collections.binarySearch(LinkedList): cannot find method Java Basics - Anfänger-Themen 6
S Collections Sortieren von 3 Collections nach "einer Sortierung" Java Basics - Anfänger-Themen 3
T Kleine Frage zu Collections Java Basics - Anfänger-Themen 3
A Collections und ArrayList Java Basics - Anfänger-Themen 2
S Klasse Mit Collections Java Basics - Anfänger-Themen 32
X DB4O Collections and Arrays, brauche dringend Hilfe! Java Basics - Anfänger-Themen 3
D Datentypen Generische Collections und Warnings Java Basics - Anfänger-Themen 8
K Aufgabe Collections Java Basics - Anfänger-Themen 2
D Collections - subList erstellen Java Basics - Anfänger-Themen 4
S Frage zu Enumerator der trad.Collections Java Basics - Anfänger-Themen 8
M Instanzen, Referenzen und Collections Java Basics - Anfänger-Themen 3
Dit_ Collections.sort(..); | Anwendung Java Basics - Anfänger-Themen 4
T array erweitern/flexible ohne collections usw. Java Basics - Anfänger-Themen 3
M Collections{Liste aus Objekten erzeugen] Java Basics - Anfänger-Themen 19
S generics und Collections#unmodifiableList Java Basics - Anfänger-Themen 2
G Wann Arrays, wann Collections? Java Basics - Anfänger-Themen 36
N Collections Sort ArrayList<> Java Basics - Anfänger-Themen 7
N Suche Infos zu Maps - Collections Java Basics - Anfänger-Themen 4
G erstes Arbeiten mit Collections Java Basics - Anfänger-Themen 17
Zed Collections? ArrayList, Vector. Java Basics - Anfänger-Themen 2
M Collections kopieren (ArrayList<Point>) Java Basics - Anfänger-Themen 3
T Fragen zu Collections Java Basics - Anfänger-Themen 2
J Collections "schachteln" Java Basics - Anfänger-Themen 5
ff Java Collections Java Basics - Anfänger-Themen 4
H Collections Frameworks Java Basics - Anfänger-Themen 38
T Object Collections durchsuchen und nutzen Java Basics - Anfänger-Themen 6
S Mit Collections elemente sammeln Java Basics - Anfänger-Themen 7
D Collections.sort() frage Java Basics - Anfänger-Themen 6
G Java Collections Framework : id + 5 Werte , gibt es sowas Java Basics - Anfänger-Themen 4
frau-u Collections und Interfaces Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben