# Anagramme auslesen (AWT Applet)



## Gast (16. Apr 2007)

hi,

auch wenn hier keine hausaufgaben gemacht werden sollen, möchte ich hier an all die hilfsbereiten und netten java programmierer appelieren 

wir nehmen in informatik seit kurzem java durch und haben folgende aufgabe bekommen:

*
schreiben sie ein java applet mit dem namen anagramme, welches alle möglichen
anagramme eines wortes bildet.*


dabei sind auch ganze sätze wie z.b. das mittlerweile 'berühmte' o, draconian devil gefragt.

ich habe nun zwar eine idee, wie es gehen könnte, aber wie ich das umsetzen soll ist mir ein rätsel...
im netz habe ich mich auch schlau gemacht, allerdings werde ich da nicht wirklich fündig.




vielen, vielen dank im voraus...


----------



## Ariol (16. Apr 2007)

Benutz ein Char-Array

1. anagramm
tausche vom wort die ersten beiden buchstaben aus.

2. anagramm
tausche vom wort den 2. und den 3. buchstaben aus

3. anagramm
tausche vom 2. anagramm die ersten beiden buchstaben aus.


usw.


Beispiel

hallo:

1. ahllo
2. hlalo
3. lhalo
4. hllao
.....


----------



## Gast (16. Apr 2007)

hi,

erst einmal vielen dank!

was ist aber, wenn ich jetzt bspw. das wort 'ton' habe, welches eine ungerade anzahl an buchstaben hat?


----------



## Gast (16. Apr 2007)

ok, ton ist ein schlechtes beispiel 

aber generell anagramme mit einer ungeraden anzahl an buchstaben...


----------



## Gast (16. Apr 2007)

vergiss alles, was ich gesagt habe 

vielen dank für deinen lösungsvorschlag...


----------



## Ariol (16. Apr 2007)

wieso?

ton ist doch einfach:

1. otn
2. tno
3. nto
...

von hinten gehts besser:

ton <-original
tno <-hinten getauscht

otn <-2.Buchstabe nach vorne
ont <-hinten getauscht

nto <-3.Buchstabe nach vorne
not <-hinten getauscht


Bei 4 Buchstaben must du dann die gleichen Schritte durchführen:
(TIER)

T IER -> IER auf das beispiel oben anwenden (T bleibt vorangestellt)
I TER -> TER auf das beispiel oben anwenden (I bleibt vorangestellt)
E TIR -> TIR auf das beispiel oben anwenden (E bleibt vorangestellt)
R TIE -> TIE auf das beispiel oben anwenden (R bleibt vorangestellt)


damit bekommst du insgesammt x! anagramme (doppelte nicht ausgeschlossen)


----------



## abollm (16. Apr 2007)

Gast hat gesagt.:
			
		

> hi,
> [..]
> *
> schreiben sie ein java applet mit dem namen anagramme, welches alle möglichen
> ...



Hm, ich halte die Aufgabenstellung für unpräzise. Meinen die nun jede mögliche Kombination oder wirkliche Anagramme?

Ein Anagramm ist ja dadurch gekennzeichnet, dass aus dem Ausgangswort oder der -phrase wieder sinnvolle Wörter oder Phrasen entstehen.

Beim Wort Not gibt es die folgenden (theoretisch) möglichen Kombinationen (Groß- und Kleinschreibung außer Acht gelassen):

0: not 
1: nto 
2: ont 
3: otn 
4: ton 
5: tno 

Sinnvoll ist eigentlich nur das Wort "ton". Die anderen Kombinationen stellen höchstens Abkürzungen dar.

Benutz mal die Forensuche. Ich hatte hier vor geraumer Zeit einmal ein Programm dazu gepostet.


----------



## Ariol (16. Apr 2007)

Nicht böse sein, aber ich glaube nur sinnvolle anagramme zu bilden ist etwas zu kompliziert für Gast.
Ne Datenbankanbindung scheint doch etwas zu heftig zu sein


----------



## abollm (16. Apr 2007)

Ariol hat gesagt.:
			
		

> Nicht böse sein, aber ich glaube nur sinnvolle anagramme zu bilden ist etwas zu kompliziert für Gast.
> Ne Datenbankanbindung scheint doch etwas zu heftig zu sein



Die Kombinationen zu bilden ist dagegen ziemlich trivial und zudem nur sinnvoll bei Wörtern bis max. ca. 9 Buchstaben.


----------



## Ariol (16. Apr 2007)

Gast hat gesagt.:
			
		

> wir nehmen in informatik seit kurzem java durch und haben folgende aufgabe bekommen:



Waren deine ersten Java-Programme nicht trivial???

Hallo Welt-Programm

Schreiben sie eine Klasse Konto, mit ein und Auszahlen....



Da ist es doch noch recht anspruchsvoll dämlich anagramme zu bilden, wenn auch vielleicht nicht so sinnvoll!


----------



## abollm (16. Apr 2007)

Ariol hat gesagt.:
			
		

> Gast hat gesagt.:
> 
> 
> 
> ...



Zunächst: Trivial heißt ja nicht zwingend "supereinfach", "anspruchslos" oder etwas ähnliches. Grundsätzlich hast du ja Recht, nur geht es mir um die Aufgabenstellung Man sollte dann eher von Kombinationen und nicht von Anagrammen reden.


----------



## Gast (16. Apr 2007)

also erst einmal vielen dank an alle antworten...

ne datenbank anbindung übersteigt wirklich meine 'fähigkeiten', hab auch dergleichen im netz gefunden und war damit hoffnungslos überfordert...

der lehrer ist mit einer auflistung aller möglichen kombinationen zufrieden.

@abollm
hab in der forensuche nichts gefunden. für einen link wäre ich dir seeehr dankbar


----------



## Gast (16. Apr 2007)

@ariol

wir haben java nie wirklich erklärt bekommen...

uns wurden ein, zwei snippets gegeben und damit mussten wir dann arbeiten.
mein erstes applet war ein kopfrechentrainer für die 6te klasse (wo ich ein komplettes wochenende dran gesesen habe...)


----------



## Ariol (16. Apr 2007)

abollm hat gesagt.:
			
		

> Zunächst: Trivial heißt ja nicht zwingend "supereinfach", "anspruchslos" oder etwas ähnliches. Grundsätzlich hast du ja Recht, nur geht es mir um die Aufgabenstellung Man sollte dann eher von Kombinationen und nicht von Anagrammen reden.



Jupp, da muss ich dir Recht geben.  :applaus:  Aber wir hatten auch des öfteren Übungen, wo man 5 mal überlegen musste was jetzt gewollt ist.  :?

Ist halt so, da muss man durch


----------



## abollm (16. Apr 2007)

Gast hat gesagt.:
			
		

> also erst einmal vielen dank an alle antworten...
> 
> [..]der lehrer ist mit einer auflistung aller möglichen kombinationen zufrieden.
> 
> ...



Sorry, auch ich habe das mit dieser "genialen" Forensuche nicht gefunden. Deshalb hier ein Programm aus meinem Fundus zum Thema, d.h. per Callback werden alle Kombinationen eines Wortes ermittel. Vorsicht, nur bis ca. 8 .. 9 Buchstaben verwenden!

```
public class CombinationsByCallback {
    public interface Callback {
        public void notify(String combination);
    }

    static public void generateCombinations(String v, Callback callback) {
        next(v.toCharArray(), 0, callback);
    }

    static private void next(char[] values, int level, Callback callback) {
        if (level < values.length) {
            next(values, level + 1, callback);
            for (int index = level + 1; index < values.length; index++) {
            	char temp = values[level];
                values[level] = values[index];
                values[index] = temp;
                next(values, level + 1, callback);
                values[index] = values[level];
                values[level] = temp;
            }
        } else {
            callback.notify(new String(values));
        }
    }

    public static void main(String[] args) {
            // hiermit generierst du alle Kombinationen eines Worts:
            generateCombinations("superpoet", new CombinationsByCallback.Callback() {
            int count = 1;

            public void notify(String combination) {
                
            	System.out.println(count++ + ": " + combination+ " ");
            }
        });
    }
}
```


----------



## abollm (16. Apr 2007)

@Gast:
Das Progarmm da oben wird dir dein Lehrer sicher nicht als dein eigenes Produkt abkaufen, aber es stellt eben eine Möglichkeit dar, das Problem zu lösen.

Lustig ist noch, das das von mir willkürlich gewählte Wort "superpoet" u.a. die Kombination "pupsroete" enthält. ;-)


----------



## Ariol (16. Apr 2007)

japp, auf die länge des wortes musst du aufpassen, da bei n Buchstaben n! Kombinationen rauskommen (natürlich bei gleichen Buchstaben auch doppelte, aber auch die werden ja berechnet)

soll heißen: 10 Buchstabe ergeben 3,6288Mio Kombinationen

Die zu errechnen dauert natürlich ordentlich (wenn das Programm nicht abstürzt)


----------



## Gast (17. Apr 2007)

vielen, vielen dank an alle...


@abollm
du musst das jetzt nicht machen, aber fragen tu ich dennoch (kostet ja nichts  )

könntest du mir auf der basis deines programmes mithilfe dieser befehle, die wir bekommen haben

-> http://img247.imageshack.us/img247/3706/picture1bx2.png

den gewünschten 'anagramm-generator' erstellen?

wäre gaaaanz nett von dir  (wenn du evtl. interesse an einer joost einladung hast...  )


----------



## abollm (17. Apr 2007)

Gast hat gesagt.:
			
		

> vielen, vielen dank an alle...
> 
> 
> @abollm
> ...



Hey, du must die AUfgabe erledigen, nicht ich!

Bedenke: Das ist hier kein Aufgabenlösungsforum, weder für Schüler noch für Studis.

Wo genau liegt denn dein Problem oder deine Probleme bezüglich der Anforderungen?

Irgendwie habe ich noch in Erinnerung, dass du ein Applet erstellen sollst, richtig? Das allein ist schon ein Thema für sich. Hast du irgendein Gerüst, auf dem man aufbauen kann.

Ich habe heute zudem eine Terminaufgabe und dürfte hier im Grunde gar keine Beiträge lesen geschweige denn Hausaufgaben lösen.


----------



## Gast (17. Apr 2007)

ok, fragen kann man ja mal...

ich weiß nicht, wie die anweisung lautet, mit der man ein zwei zeichen innerhalb eines strings tauscht.
dies war ja der erdachte lösungsansatz... 

wenn mir den jmd sagen könnte, also den befehl für char array (oder wie auch immer der ist), wäre ich rundum glücklich


----------



## Leroy42 (17. Apr 2007)

```
String tausche(String s, int i, int j) {
		char[] chars = s.toCharArray();
		char help = chars[i];
		chars[i] = chars[j];
		chars[j] = help;
		return new String(chars);
	}
```

Aber ich denke mal, das du das eigentlich gar nicht brauchst.


----------



## Gast (17. Apr 2007)

@Leroy42
wie würdest du das denn, vom prinzip her, machen?


----------

