2017-12-22 4 views
2

Ich versuche ein Programm zu erstellen, das zehn Kleinbuchstaben ausgibt - fünf Vokale und fünf Konsonanten. Um dies zu tun, habe ich begonnen, indem ich ein Char-Array mit einem Bereich zwischen 'a' und 'z' namens letters[] mit Größe 10 erstellen. Sobald das Array gefüllt ist, werde ich die Ausgabe mit einer Formatzeichenfolge ausgeben, die alles im Array enthält .Erstellen eines Zeichenarrays mit einer bestimmten Anzahl von Vokalen und Konsonanten (Java)

Meine Frage ist, wie würde ich das Programm geben genau fünf von jedem Typ (und halten Sie die Reihenfolge der Zeichen völlig zufällig gedruckt)? Ich habe überlegt, die switch-Anweisung mit je einem Fall für Konsonanten und Vokale zu verwenden, aber meine Ideen scheinen bis jetzt überkompliziert und unelegant.

-Code bisher:

char letters[] = new char[10]; 
for(int i = 0; i < letters.length; i++){ //Open for 

letters[i] = (char)(97 + Math.random() * 26); 
char idx = letters[i]; 

System.out.printf("%s",idx); 

} //End for 
+0

Nur 5 zufällige Konsonanten setzen und 5 zufällige Vokale in einem Array und Shuffle. – shmosel

+0

Vielleicht könnten Sie uns Ihren Code zeigen, da ich nicht sicher bin, wie Sie Ihr Array füllen. Bei einer Schätzung könnten Sie vielleicht die Anzahl der Vokale und die Anzahl der Konsonanten, die Sie den Buchstaben hinzugefügt haben, fortlaufend zählen. Sobald Sie 5 für beide Werte erreicht haben, hören Sie auf, diesen Typ hinzuzufügen. – dave

+0

Ich werde meinen Code bis jetzt OP hinzufügen. Es ist nicht viel, aber hoffentlich gibt es dir eine Vorstellung davon, wie ich das machen möchte. –

Antwort

0

Wenn Sie eine etwas mehr String-bezogene Lösung nicht stört, hier ist eine. Ich gehe davon aus, dass kein Konsonant oder Vokal in der Ausgabezeichenfolge wiederholt werden soll. Daher entfernt dieser Algorithmus Buchstaben, die berücksichtigt werden sollen, sobald sie verwendet wurden. Es bietet auch ein bisschen mehr von einer generischen Briefwähler-Routine, die nicht wirklich auf Vokale und Konsonanten beschränkt ist.

import java.lang.StringBuilder; 

public class Shuffler { 
    public static String CONSONANTS = "bcdfghjklmnpqrstvwxyz"; 
    public static String VOWELS = "aeiou"; 

    /* 
    * Returns a new string that is a combination of the current string and 'count' 
    * characters from the source string (using any character in the source string 
    * no more than one time). 
    */ 
    public static String shuffleIntoString(String current, String source, int count) { 
     if (current == null || source == null || count < 0 || count > source.length()) { 
      System.out.println("Error in parameters to shuffleIntoString"); 
      return null; 
     } 

     StringBuilder retval = new StringBuilder(current);  // build up by inserting at random locations 
     StringBuilder depletedSource = new StringBuilder(source); // remove characters as they are used 

     for (int i = 0; i < count; i++) { 
      int pick = (int) (Math.random() * depletedSource.length()); 
      int whereToInsert = (int) (Math.random() * retval.length()); 
      retval = retval.insert(whereToInsert, depletedSource.charAt(pick)); 
      depletedSource.deleteCharAt(pick); 
     } 

     return retval.toString(); 
    } 

    public static void main(String[] args) { 
     Shuffler shuf = new Shuffler(); 

     for (int i = 0; i < 10; i++) { 
      String result = shuf.shuffleIntoString("", shuf.CONSONANTS, 5); 
      result = shuf.shuffleIntoString(result, shuf.VOWELS, 5); 
      System.out.println(result); 
     } 
    } 
} 

Und die Ausgabe sieht wie folgt aus:

kqoibauzed 
uhcawoerib 
afdzoemius 
yuagocibej 
eiuhaokcyq 
ouveiawrxn 
uyaiveomxn 
ruxeoalhij 
uraliwfeoc 
afoutiesmr 
0

Dies wird erreichen, was Sie sich wünschen, wenn Sie mit der Verwendung ArrayLists zufrieden sind. Um die zufälligen Zeichen zu generieren, könnten Sie eine Zahl innerhalb des Index der entsprechenden Zeichenfolgen generieren und den Wert zur ArrayListe hinzufügen. Collections ist eine hilfreiche Klasse, mit der Sie die Liste mischen können.

0

Ich habe keine Regeln über dupliziert gesehen, aber wenn Sie wollen, können Sie letztere aus Arrays nach der Auswahl entfernen.

List<Character> vowels = Arrays.asList('a', 'e', 'i', 'o', 'u'); 

    List<Character> consonants = new ArrayList<>(); 

    for (char latter = 'a'; latter <= 'z'; latter++) { 
     if(!vowels.contains(latter)) { 
      consonants.add(latter); 
     } 
    } 

    final Random random = new Random(); 

    int vowelsRemain = 5; 
    int consonantsRemain = 5; 

    List<Character> result = new ArrayList<>(); 

    while (vowelsRemain > 0 && consonantsRemain > 0) { 
     final boolean generateVowel = random.nextBoolean(); 

     final char randomLatter; 

     if(generateVowel) { 
      randomLatter = vowels.get(random.nextInt(vowels.size())); 
      vowelsRemain--; 
     } else { 
      randomLatter = consonants.get(random.nextInt(consonants.size())); 
      consonantsRemain--; 
     } 

     result.add(randomLatter); 
    } 

    while (vowelsRemain > 0) { 
     final Character randomVowel = vowels.get(random.nextInt(vowels.size())); 
     result.add(randomVowel); 

     vowelsRemain--; 
    } 

    while (consonantsRemain > 0) { 
     final Character randomConsonant = consonants.get(random.nextInt(consonants.size())); 
     result.add(randomConsonant); 

     consonantsRemain--; 
    } 

    System.out.println(result); 
Verwandte Themen