Set/HashSet

truejojo

Grünschnabel
Hallo, vielleicht kann mir einer von euch helfen der das liest!
Ich bin neu bei tutorials und bin auch Programmier-Anfänger!
Zu meinem Problem:
Habe eine Methode geschrieben die zufallsgesteuert Silbenauwählt(d.h. erst einen Konsonanten dann ein Vokal) auswählt und diese dann hintereinander anfügt. Die länge kann man selber bestimmen!
Wie kann ich nun diese Silben in einer Liste sprich Set oder HashSet speichern?
Hab mir das so vorgestellt, das ich eine Methode schreibe in der eine Liste erstellt wird(wo ich die Länge angeben kann) wo dann die Silbenpaare eingefügt werden, so das sichergestellt ist, dass kein Silbenpaar doppelt vorkommt!
Deshalb hatte ich an das Interface Set gedacht. Hab blos leider keine Ahnung wie ich das Aufrufe wie ich die Silbenpaare in die Liste einfügen kann und dann die Liste für eine weitere Methode übergeben kann.(Dort will ich aus den Silben ein Memory-Spiel machen!).
Wäre SUPER toll wenn mir einer von euch helfen kann!!
Danke, lieben Gruß, truejojo

Hier mal die Methode, die die Silbenpaare erstellt!

final static String vokale = "AEIOU";
final static String konsonanten = "BCDFGHJKLMNPQRSTVWXYZ";

public static String silbenFolge(int silbenAnzahl)
{
String ausgabeIntern = "";
int laengeKonsonanten = konsonanten.length();
int laengeVokale = vokale.length();
int wertKonsonanten = 0;
int wertVokale = 0;
StringBuffer konsonantenNeu = new StringBuffer(konsonanten);
StringBuffer vokaleNeu = new StringBuffer(vokale);

for(int i=0; i<silbenAnzahl; i++)
{
wertKonsonanten = (int)(Math.random() *laengeKonsonanten);
ausgabeIntern += konsonantenNeu.charAt(wertKonsonanten);
konsonantenNeu = konsonantenNeu.deleteCharAt(wertKonsonanten);
laengeKonsonanten--;
if(laengeKonsonanten < 15)
{
laengeKonsonanten = konsonanten.length();
konsonantenNeu = konsonantenNeu.insert(0, konsonanten);
}

wertVokale = (int)(Math.random() *laengeVokale);
ausgabeIntern += vokaleNeu.charAt(wertVokale);
vokaleNeu = vokaleNeu.deleteCharAt(wertVokale);
laengeVokale--;
if(laengeVokale < 3)
{
laengeVokale = vokale.length();
vokaleNeu = vokaleNeu.insert(0, vokale);
}
}
return ausgabeIntern;
}
 
Java:
public class SetTest {

	private final static String VOKALE = "AEIOU";
	private final static String KONSONANTEN = "BCDFGHJKLMNPQRSTVWXYZ";

	private final static int VOKALE_ERNEUERN = 3;
	private final static int KONSONANTEN_ERNEUERN = 15;

	public static Set<String> silbenFolge(int silbenAnzahl) {
		StringBuilder konsonantenNeu = new StringBuilder(KONSONANTEN);
		StringBuilder vokaleNeu = new StringBuilder(VOKALE);

		Set<String> set = new HashSet<String>(silbenAnzahl);
		Random random = new Random( );
		int wertKonsonanten = 0;
		int wertVokale = 0;
		for (int i = 0; i < silbenAnzahl; i++) {
			String ausgabeIntern = "";
			wertKonsonanten = random.nextInt(konsonantenNeu.length( ));
			ausgabeIntern += konsonantenNeu.charAt(wertKonsonanten);
			konsonantenNeu.deleteCharAt(wertKonsonanten);
			if (konsonantenNeu.length( ) < KONSONANTEN_ERNEUERN) {
				konsonantenNeu.append(KONSONANTEN);
			}

			wertVokale = random.nextInt(vokaleNeu.length( ));
			ausgabeIntern += vokaleNeu.charAt(wertVokale);
			vokaleNeu.deleteCharAt(wertVokale);
			if (vokaleNeu.length( ) < VOKALE_ERNEUERN) {
				vokaleNeu.append(VOKALE);
			}
			set.add(ausgabeIntern);
		}
		return set;
	}

	public static void main(String[] args) {
		System.out.println(silbenFolge(50));
	}
}

Alle Felder die static final sind, sind konstanten und sollten gross geschrieben werden. Der StringBuilder ist für einen einzelnen Thread wie du ihn hast ein wenig schneller als der StringBuffer.
Die Klasse Random ist ganz schön um sich direkt ein int im gewünschten Bereich geben zu lassen.
Wie man ein Set benutzt habe ich mal eingefügt.
 
Zurück