001    package de.hska.java.aufgaben.felder;
002    
003    /**
004     * Dient zum Erzeugen von zufälligen Namen bestehende
005     * aus Vor- und Nachname. 
006     * <p>
007     *   <a href="http://www.home.hs-karlsruhe.de/~pach0003/informatik_1/aufgaben/felder.html#zufallsnamen_erzeugen">Zurück zum Aufgabentext</a>
008     * </p>
009     * 
010     * @author Christian Pape
011     */
012    public class ZufallsnamenGenerator {
013     
014      /**
015       * Liste männlicher und weiblicher Vornamen ohne
016       * Doppelnamen wie "Josef Helmut".
017       * Die Namen sind aus der deutschen Wikipedia entnommen.
018       * vornamen[0] enthält die männlichen Vornamen.
019       * vornamen[1] enthält die weiblichen Vornamen.
020       */
021      private static String vornamen [] [] = {
022          { "Aaron",
023            "Adalbert",
024            "Adam",
025            "Adolf",
026            "Adrian",
027            "Adriano",
028            "Ahmad",
029            "Albrecht",
030            "Aldhelm",
031            "Alexander",
032            "Alfred",
033            "Ali",
034            "Alois",
035            "Alwin",
036            "Amadeus",
037            "Amos", 
038            "Anastasius",
039            "Anders", 
040            "Andre",
041            "Andrea",
042            "Andreas",
043            "Andres",
044            "Andrew",
045            "Andrzej",
046            "André",
047            "Anselm",
048            "Ansgar",
049            "Anton",
050            "Antonius",
051            "Archibald",
052            "Aribert",
053            "Armin",
054            "Arndt",
055            "Arne",
056            "Arnim",
057            "Arno", 
058            "Arnold",
059            "Arnulf",
060            "Aron",
061            "Arthur", 
062            "Artur",
063            "Arved",
064            "Asmus",
065            "Attila", 
066            "August", 
067            "Augustin",
068            "Axel",
069            "Balduin",
070            "Baldur",
071            "Balthasar",
072            "Baptist",
073            "Barnabas",
074            "Bartholom",
075            "Bastian",
076            "Beat", 
077            "Benedikt",
078            "Benjamin",
079            "Benno",
080            "Benutzer",
081            "Bernd",
082            "Bernhard",
083            "Berno",
084            "Bert",
085            "Berthold",
086            "Bertram",
087            "Birger",
088            "Björn",
089            "Blasius",
090            "Bogdan",
091            "Boleslaw",
092            "Bonifatius",
093            "Boris",
094            "Brian",
095            "Burckhardt",
096            "Burkhardt",
097            "Béla",
098            "Caesar",
099            "Calvin",
100            "Can", 
101            "Candid",
102            "Carl",
103            "Carlos",
104            "Carsten",
105            "Charles",
106            "Charlie",
107            "Charly",
108            "Chlodwig",
109            "Chlothar",
110            "Christian",
111            "Christoph",
112            "Christopher",
113            "Clyde", 
114            "Conan",
115            "Cornelius",
116            "Corvin",
117            "Cosimo", 
118            "Crispian",
119            "Dagobert",
120            "Damian",
121            "Daniel", 
122            "Dario",
123            "David", 
124            "Dedo",
125            "Denes",
126            "Dennis",
127            "Dietmar",
128            "Dietrich",
129            "Dimitrij",
130            "Dirk", 
131            "Djordje",
132            "Dominik",
133            "Eberhard",
134            "Eckbert",
135            "Edgar",
136            "Edmund",
137            "Eduard",
138            "Edwin",
139            "Eike",
140            "Ekkehard",
141            "Eli",
142            "Elias", 
143            "Elmar",
144            "Elton",
145            "Emanuel",
146            "Emil",
147            "Enno",
148            "Enrico",
149            "Erich",
150            "Erkan",
151            "Erkmar",
152            "Ernst", 
153            "Erwin",
154            "Eugen",
155            "Ewald", 
156            "Fabian",
157            "Fabius",
158            "Falk",
159            "Felix",
160            "Ferdinand",
161            "Finn", 
162            "Flavio",
163            "Florestan",
164            "Florian",
165            "Florin",
166            "Frank",
167            "Franz",
168            "Franz",
169            "Fred",
170            "Frederick",
171            "Fridolin",
172            "Friedemann",
173            "Friedrich",
174            "Fritz",
175            "Gabriel", 
176            "Gaudenz",
177            "Gebhard",
178            "Geoffrey",
179            "Georg",
180            "Gerhard",
181            "Gernot",
182            "Gerold",
183            "Gilbert", 
184            "Gotthard",
185            "Grant",
186            "Gregor",
187            "Grischa",
188            "Guido",
189            "Gundo",
190            "Gunnar",
191            "Gunther",
192            "Guntram",
193            "Gustav",
194            "Götz",
195            "Günther",
196            "Hadmar",
197            "Hadrian", 
198            "Hans",
199            "Harald",
200            "Harro",
201            "Hartmut",
202            "Hartwin",
203            "Hauke",
204            "Heinrich",
205            "Helmut",
206            "Henning",
207            "Herbert",
208            "Heribert",
209            "Hermann",
210            "Heron",
211            "Holger",
212            "Horst",
213            "Hubert",
214            "Hugo",
215            "Igor",
216            "Ilja",
217            "Immanuel",
218            "Inga",
219            "Ingmar",
220            "Ingo",
221            "Ira",
222            "Isaak",
223            "Ivo",
224            "Jakob",
225            "James",
226            "Jan",
227            "Jari",
228            "Jehoschua",
229            "Jesko",
230            "Jesus",
231            "Jo",
232            "Joachim",
233            "Joah",
234            "Johann",
235            "Johannes",
236            "Jonas",
237            "Jonathan",
238            "Josef",
239            "Josua",
240            "Julian",
241            "Julier",
242            "Julius",
243            "Justus",
244            "Jógvan",
245            "Jörg",
246            "Jörn",
247            "Jürgen",
248            "Kai",
249            "Kari",
250            "Karl",
251            "Kasimir",
252            "Kaspar",
253            "Keanu",
254            "Kenneth",
255            "Kevin",
256            "Kimball",
257            "Klaus",
258            "Klemens",
259            "Knut",
260            "Koloman",
261            "Konrad",
262            "Konstantin",
263            "Korbinian",
264            "Kurt",
265            "Lamprecht",
266            "Laurentius",
267            "Lawrence",
268            "Leo",
269            "Leon",
270            "Leonhard",
271            "Leopold",
272            "Linus",
273            "Lionel",
274            "Lorenz",
275            "Loris",
276            "Lothar",
277            "Louis",
278            "Luca",
279            "Ludger",
280            "Ludwig",
281            "Lukas",
282            "Mahomet",
283            "Malte",
284            "Manfred",
285            "Manuel",
286            "Mario",
287            "Markus",
288            "Marten",
289            "Martin",
290            "Marvin",
291            "Matthias",
292            "Maximilian",
293            "Medard",
294            "Merten",
295            "Micha",
296            "Michael",
297            "Michel",
298            "Miguel",
299            "Mike",
300            "Mirko",
301            "Modestus",
302            "Mohammed",
303            "Moritz",
304            "Nando",
305            "Nathan",
306            "Nico",
307            "Nikita",
308            "Nikola",
309            "Nikolai",
310            "Nikolaus",
311            "Nils",
312            "Norbert",
313            "Odo",
314            "Olaf",
315            "Oleg",
316            "Oliver",
317            "Olivier",
318            "Oskar",
319            "Oswald",
320            "Othmar",
321            "Otto",
322            "Pascal",
323            "Patrice",
324            "Patrick",
325            "Paul",
326            "Peer",
327            "Peppone",
328            "Peter",
329            "Petrus",
330            "Philemon",
331            "Philipp",
332            "Quintus",
333            "Quirin",
334            "Radomir",
335            "Raimund",
336            "Rainer",
337            "Ralph",
338            "Raphael",
339            "Reinhard",
340            "Reinhold",
341            "René",
342            "Ricardo",
343            "Richard",
344            "Ringo",
345            "Roald",
346            "Robert",
347            "Robin",
348            "Rochus",
349            "Roland",
350            "Roy",
351            "Ruben",
352            "Rudolf",
353            "Rupert",
354            "Rupertus",
355            "Ruprecht",
356            "Rüdiger",
357            "Sachso",
358            "Salomo",
359            "Samuel",
360            "Sandy",
361            "Sascha",
362            "Sean",
363            "Sebastian",
364            "Shelly",
365            "Siegfried",
366            "Siegmund",
367            "Sigismund",
368            "Silas",
369            "Silvester",
370            "Silvio",
371            "Simon",
372            "Sjard",
373            "Stephan",
374            "Sven",
375            "Sönke",
376            "Sören",
377            "Tarik",
378            "Tassilo",
379            "Theodor",
380            "Theodosius",
381            "Thilo",
382            "Thomas",
383            "Thorbjörn",
384            "Thorsten",
385            "Thrasyvoulos",
386            "Tim",
387            "Timon",
388            "Tobias",
389            "Tom",
390            "Toni",
391            "Torben",
392            "Torger",
393            "Tristan",
394            "Udo",
395            "Ulf",
396            "Ulrich",
397            "Urs",
398            "Uwe",
399            "Valentin",
400            "Vivien",
401            "Volker",
402            "Waldemar",
403            "Walter",
404            "Warner",
405            "Wenzel",
406            "Werner",
407            "Weselius",
408            "Widukind",
409            "Wieland",
410            "Wilhelm",
411            "William",
412            "Winand",
413            "Wladimir",
414            "Wladyslaw",
415            "Wolfgang",
416            "Wolfhard",
417            "Wolfram",
418            "Xaver",
419            "Yannick",
420            "Zacharias",
421            "Zenon",
422            "Zoticus",  
423          },
424          
425          {
426            "Abigail",
427            "Ada",
428            "Adela",
429            "Adele",
430            "Adelgunde",
431            "Adelheid",
432            "Adelinde",
433            "Adina",
434            "Adriana",
435            "Adriane",
436            "Adrienne",
437            "Agathe",
438            "Agnes",
439            "Alberta",
440            "Alexandra",
441            "Alice",
442            "Alma",
443            "Almut",
444            "Aloisia",
445            "Alraune",
446            "Alrun",
447            "Alwine",
448            "Amalie",
449            "Amelie",
450            "Amina",
451            "Anabel",
452            "Anastasia",
453            "Andrea",
454            "Angela",
455            "Angelika",
456            "Angelina",
457            "Anita",
458            "Anja",
459            "Anka",
460            "Anke",
461            "Anna",
462            "Annegret",
463            "Anneliese",
464            "Annemarie",
465            "Annette",
466            "Annika",
467            "Annouk",
468            "Anouk",
469            "Ansgard",
470            "Antje",
471            "Antoinette",
472            "Antonia",
473            "Antonie",
474            "Apollonia",
475            "Arabella",
476            "Ariadne",
477            "Ariane",
478            "Armgard",
479            "Asgard",
480            "Asta",
481            "Astrid",
482            "Augusta",
483            "Augustine",
484            "Aurora",
485            "Ava",
486            "Babette",
487            "Barbara",
488            "Beate",
489            "Beatrice",
490            "Beatrix",
491            "Berenike",
492            "Berit",
493            "Bettina",
494            "Bianka",
495            "Birgit",
496            "Brigitte",
497            "Carina",
498            "Carmen",
499            "Carola",
500            "Carolin",
501            "Celina",
502            "Cemile",
503            "Charlotte",
504            "Christiane",
505            "Christine",
506            "Claire",
507            "Claudia",
508            "Clementine",
509            "Cora",
510            "Cordula",
511            "Corinna",
512            "Cornelia",
513            "Cosima",
514            "Cäcilia",
515            "Cäcilie",
516            "Dagmar",
517            "Dana",
518            "Daniela",
519            "Debora",
520            "Delia",
521            "Denise",
522            "Diana",
523            "Diethild",
524            "Dora",
525            "Dorothea",
526            "Edeltraud",
527            "Eleonore",
528            "Elisabeth",
529            "Elsa",
530            "Else",
531            "Emma",
532            "Esther",
533            "Eudokia",
534            "Eva",
535            "Evelyn",
536            "Fabia",
537            "Felicitas",
538            "Fenja",
539            "Fennedine",
540            "Fiona",
541            "Florence",
542            "Franziska",
543            "Frauke",
544            "Frida",
545            "Frieda",
546            "Gabriele",
547            "Genoveva",
548            "Geofreda",
549            "Georgia",
550            "Gerlinde",
551            "Gertrud",
552            "Gisela",
553            "Gunda",
554            "Gundela",
555            "Gundelinde",
556            "Hannah",
557            "Hannelore",
558            "Hedwig",
559            "Heidi",
560            "Heike",
561            "Heilgard",
562            "Helena",
563            "Helene",
564            "Helga",
565            "Helgard",
566            "Hella",
567            "Henriette",
568            "Hilde",
569            "Hildegard",
570            "Holde",
571            "Ilka",
572            "Ilona",
573            "Ilse",
574            "Inga",
575            "Ira",
576            "Irene",
577            "Iris",
578            "Irma",
579            "Irmgard",
580            "Isabella",
581            "Jana",
582            "Janina",
583            "Janine",
584            "Janna",
585            "Jeanette",
586            "Jeannette",
587            "Jelena",
588            "Jennifer",
589            "Jenny",
590            "Jessica",
591            "Jo",
592            "Joelle",
593            "Johanna",
594            "Josephine",
595            "Judith",
596            "Julia",
597            "Juliane",
598            "Jördis",
599            "Kari",
600            "Karla",
601            "Karoline",
602            "Kassandra",
603            "Keiko",
604            "Kerstin",
605            "Kira",
606            "Klara",
607            "Kriemhild",
608            "Laetitia",
609            "Larissa",
610            "Laura",
611            "Lea",
612            "Leonie",
613            "Leyla",
614            "Liane",
615            "Lilith",
616            "Lilli",
617            "Linda",
618            "Lisanne",
619            "Lucia",
620            "Luise",
621            "Lydia",
622            "Madita",
623            "Magdalena",
624            "Maike",
625            "Malwine",
626            "Mandy",
627            "Manuela",
628            "Marcella",
629            "Margarete",
630            "Maria",
631            "Marianne",
632            "Marietta",
633            "Marina",
634            "Marleen",
635            "Martha",
636            "Mathilde",
637            "Mechthild",
638            "Meike",
639            "Melanie",
640            "Meral",
641            "Mercedes",
642            "Meret",
643            "Merit",
644            "Merrit",
645            "Michaela",
646            "Milka",
647            "Miriam",
648            "Mona",
649            "Monika",
650            "Muriel",
651            "Nadia",
652            "Nadine",
653            "Nancy",
654            "Natalie",
655            "Natascha",
656            "Nefertari",
657            "Nicole",
658            "Nikola",
659            "Nina",
660            "Nora",
661            "Nyota",
662            "Olga",
663            "Olivia",
664            "Patrice",
665            "Paula",
666            "Petra",
667            "Pia",
668            "Rahel",
669            "Rebecca",
670            "Regina",
671            "Renate",
672            "Rike",
673            "Rita",
674            "Romy",
675            "Ronja",
676            "Ruth",
677            "Sabine",
678            "Sabrina",
679            "Samantha",
680            "Sandra",
681            "Sandrine",
682            "Sandy",
683            "Sarah",
684            "Sarine",
685            "Sascha",
686            "Saskia",
687            "Scholastika",
688            "Shelly",
689            "Sibylle",
690            "Sigita",
691            "Sigrid",
692            "Silvana",
693            "Silvia",
694            "Skrollan",
695            "Solveig",
696            "Solvej",
697            "Solvi",
698            "Sophia",
699            "Stella",
700            "Susanne",
701            "Synke",
702            "Tabea",
703            "Tamara",
704            "Tanja",
705            "Tatjana",
706            "Theodora",
707            "Therese",
708            "Thordis",
709            "Thurid",
710            "Tina",
711            "Tuja",
712            "Tullia",
713            "Ulrike",
714            "Ursula",
715            "Urte",
716            "Ute",
717            "Vanessa",
718            "Vera",
719            "Verena",
720            "Veronika",
721            "Viola",
722            "Virginia",
723            "Vivien",
724            "Walburga",
725            "Waltraud",
726            "Welella",
727            "Wiebke",
728            "Wilhelmine",
729            "Wilma",
730            "Wiltrud",
731            "Winifred",
732            "Xanthippe",
733            "Xaveria",
734            "Yvonne",
735            "Zita",
736            "Zoe",
737          }
738      };
739      
740      /**
741       * Die Liste deutscher Nachnamen, ohne Doppelnamen wie
742       * "Meier-Müller". Die Namen stammen aus der deutschen
743       * Wikipedia.
744       */
745      private static String nachnamen [] = {
746            "Abendroth",
747            "Abraham",
748            "Abt",
749            "Adam",
750            "Albert",
751            "Albrecht",
752            "Amalie",
753            "Anders",
754            "Andres",
755            "Appel",
756            "Baumann",
757            "Becherer",
758            "Becker",
759            "Behm",
760            "Biermann",
761            "Böhm",
762            "Böll",
763            "Braun",
764            "Brühlmeier",
765            "Calvin",
766            "Christiansen",
767            "Curtius",
768            "Diederich",
769            "Dürrschnabel",
770            "Eschenburg",
771            "Falk",
772            "Fehling",
773            "Fischer",
774            "Forge",
775            "Förster",
776            "Frank",
777            "Franz",
778            "Frenzel",
779            "Freud",
780            "Freund",
781            "Friedemann",
782            "Fröhlich",
783            "Gärtner",
784            "Gerster",
785            "Glaser",
786            "Götz",
787            "Gruber",
788            "Grubner",
789            "Hackmann",
790            "Haller",
791            "Heider",
792            "Heine",
793            "Henne",
794            "Hering",
795            "Herold",
796            "Herrmann",
797            "Herzog",
798            "Hintz",
799            "Hoffmann",
800            "Honecker",
801            "Howaldt",
802            "Huber",
803            "Hünlein",
804            "Ines",
805            "Ingo",
806            "Ineichen",
807            "Jauch",
808            "Jung",
809            "Jörg",
810            "Jakobi",
811            "Kaiser",
812            "Kästner",
813            "Klaus",
814            "Knebel",
815            "Köhler",
816            "Kolmar",
817            "Körner",
818            "Kosba",
819            "Krämer",
820            "Krause",
821            "Krüger",
822            "Krupp",
823            "Kühn",
824            "Kurz",
825            "Lai",
826            "Lammers",
827            "Landgraf",
828            "Landzettel",
829            "Leber",
830            "Lehmann",
831            "Lehner",
832            "Lenz",
833            "Löchte",
834            "Lohmann",
835            "Lorenz",
836            "Lücking",
837            "Ludwig",
838            "Luhmann",
839            "Mach",
840            "Marg",
841            "Marx",
842            "Meier",
843            "Mester",
844            "Meyer",
845            "Micus",
846            "Müller",
847            "Naumann",
848            "Neumann",
849            "Nietzsche",
850            "Noack",
851            "Nordmann",
852            "Ossege",
853            "Oswald",
854            "Otto",
855            "Overbeck",
856            "Peter",
857            "Pfeiffer",
858            "Pilsak",
859            "Plagemann",
860            "Pohl",
861            "Pügner",
862            "Preuß",
863            "Quant",
864            "Querfurt",
865            "Rebahi",
866            "Reich",
867            "Resch",
868            "Richter",
869            "Rohlfs",
870            "Rumpf",
871            "Ruoff",
872            "Sam",
873            "Sander",
874            "Sauerbruch",
875            "Schäfer",
876            "Schillung",
877            "Schinder",
878            "Schleich",
879            "Schmid",
880            "Schmidt",
881            "Schmitt",
882            "Schneider",
883            "Schnorr",
884            "Schnur",
885            "Schnurr",
886            "Schnurre",
887            "Schnurrer",
888            "Scholz",
889            "Schubert",
890            "Schultheiß",
891            "Schulthess",
892            "Schröder",
893            "Schulz",
894            "Schulze",
895            "Schultz",
896            "Selbmann",
897            "Semper",
898            "Siemens",
899            "Sommer",
900            "Sommerfeld",
901            "Sonntag",
902            "Sperner",
903            "Steiner",
904            "Sygnetzki",
905            "Tannhäuser",
906            "Tenberge",
907            "Teuber",
908            "Thode",
909            "Thoma",
910            "Thomas",
911            "Thyssen",
912            "Träger",
913            "Türk",
914            "Türck",
915            "Vogt",
916            "Voigt",
917            "Voigtländer",
918            "Weber",
919            "Weck",
920            "Wenzel",
921            "Widera",
922            "Wiegand",
923            "Wieland",
924            "Wiesel",
925            "Winkler",
926            "Wittgenstein",
927            "Wolf",
928            "Wolff",
929            "Wolfram",
930            "Wölkl",
931            "Wurm",
932            "Zacharias",
933            "Zahn"
934      };
935      
936    
937      /**
938       * Gibt einen zufälligen Namen zurück, so daß
939       * in 50% aller Fälle ein männlicher Vorname oder weiblicher Vorname
940       * entsteht.
941       * In 10% aller Fälle entsteht ein doppelter Vorname wie "Josef Helmut",
942       * in 15% aller Fälle ein Bindestrich Nachname wie "Meier-Müller".
943       * Doppelte Vornamen oder Bindestrichnamen mit identischen Namen wie
944       * "Josef Josef" oder "Müller-Müller" entstehen nie.
945       */
946      public String getName() {
947        return getZufaelligerVorname(Math.random() <= 0.5)
948            + " " + getZufaelligerNachname();
949      }
950      
951    
952      /**
953       * Gibt einen zufälligen Vornamen zurück. Wenn
954       * <code>maennlich</code> true ist, wird ein männlicher
955       * Vorname zurückgegeben; ansonsten ein weiblicher.
956       * In 10% der Fälle wird ein zweiter Vorname zurückgegeben wie
957       * "Josef Helmut".
958       * 
959       * @param maennlich
960       * @return einen zufälligen nännlichen oder weiblichen Vornamen
961       *         mit jeweils 50% Wahrscheinlichkeit
962       */
963      private String getZufaelligerVorname(boolean maennlich) {
964        String [] vornamen = ZufallsnamenGenerator.vornamen[0];
965        String vorname =  vornamen[ (int) Math.round( Math.random() * vornamen.length - 0.5) ];
966        String zweiterVorname;
967        
968        if (!maennlich) {
969          vornamen = ZufallsnamenGenerator.vornamen[1];
970        }
971        
972        if (Math.random() <= 0.1) {
973          
974          do {
975            zweiterVorname = vornamen[ (int) Math.round( Math.random() * vornamen.length - 0.5) ];
976          } while  ( vornamen.equals(zweiterVorname) );
977          vorname = vorname + " " + zweiterVorname;
978        }
979        
980        return vorname;
981      }
982    
983      /**
984       * Gibt einen zufälligen deutschen Nachnamen zurück.
985       * In 15% der Fälle wird ein Doppelname mit Bindestrich
986       * zurückgegeben, wie etwas "Müller-Meier". Ein Doppelname
987       * mit zwei gleichen Nachnamen wird nie zurückgegeben.
988       */
989      private String getZufaelligerNachname() {
990        String nachname = getZufaelligerNachnameOhneDoppelname();
991        
992        if (Math.random() <= 0.15) {
993          String zweiterNachname;
994          do {
995            zweiterNachname = getZufaelligerNachnameOhneDoppelname();
996          } while (nachname.equals(zweiterNachname));
997         
998          nachname = nachname + "-" + zweiterNachname;
999        }
1000        
1001        return nachname;
1002      }
1003    
1004      private String getZufaelligerNachnameOhneDoppelname() {
1005        return ZufallsnamenGenerator.nachnamen[ (int) Math.round( Math.random() * nachnamen.length - 0.5) ];    
1006      }
1007     
1008    }