2017-12-22 6 views
2

소문자 글자 5 개와 자음 5 개를 출력하는 프로그램을 만들려고합니다. 이를 위해 'a''z' 사이의 문자 배열을 크기가 10 인 letters[]으로 작성했습니다. 일단 배열이 채워지면 배열의 모든 내용을 포함하는 형식 문자열을 사용하여 출력을 인쇄합니다 .모음과 자음을 사용하여 문자 배열 만들기 (Java)

제 질문은, 프로그램 출력을 각 유형 중 정확히 다섯 가지로 만들려면 어떻게해야합니까 (그리고 문자의 순서는 완전히 무작위로 유지해야합니까?). 나는 자음과 모음 각각에 대해 각각 switch 문을 사용하는 것을 고려해 왔지만, 지금까지 내 생각은 너무 복잡하고 우아하지 않은 것처럼 보인다. 지금까지

코드 :

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

단 5 개 무작위 자음과 하나 개의 배열 및 셔플로 5 개 임의 모음을 넣어. – shmosel

+0

아마 배열을 어떻게 채우고 있는지 명확하지 않아서 코드를 보여줄 수 있습니다. 추측 해 보면, 얼마나 많은 모음과 자음을'문자 '에 추가했는지 계속 계산할 수 있습니다. 어느 쪽이든 5에 도달하면 해당 유형의 추가를 중단합니다. – dave

+0

지금까지 OP에 내 코드를 추가하겠습니다. 별로는 아니지만 잘하면이 문제에 대해 어떻게 생각하는지 알려줄 것입니다. –

답변

0

문자열 관련 솔루션이 더 필요하지 않은 경우 여기를 참조하십시오. 출력 문자열에서 자음이나 모음을 반복하지 않기를 원한다는 가정하에이 알고리즘은 사용 된 문자를 고려하여 제거합니다. 또한 모음과 자음에 국한되지 않는 일반 편지 선택 도구를 제공합니다.

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); 
     } 
    } 
} 

는 그리고 출력은 다음과 같습니다

kqoibauzed 
uhcawoerib 
afdzoemius 
yuagocibej 
eiuhaokcyq 
ouveiawrxn 
uyaiveomxn 
ruxeoalhij 
uraliwfeoc 
afoutiesmr 
0

이것은 당신이 ArrayLists을 사용하여 만족하는 경우 당신이 원하는 것을 달성 할 것이다. 임의의 문자를 생성하려면 해당 char String의 인덱스에서 숫자를 생성하고 ArrayList에 값을 추가 할 수 있습니다. Collections은 목록을 셔플하는 데 사용할 수있는 유용한 클래스입니다.

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

String consonants = "bcdfghjklmnpqrstvwxyz"; 
String vowels = "aeiou"; 

Random r = new Random(); 

for (int i = 0; i < 5; i++) { 
    list.add(consonants.charAt(r.nextInt(consonants.length()))); // Add consonant 
    list.add(vowels.charAt(r.nextInt(vowels.length()))); // Add vowel 
} 
Collections.shuffle(list); 

for (Character c : list) { 
    System.out.println(c); 
} 
0

중복에 대한 규칙은 없지만 원하는 경우 선택 후 배열에서 래스터를 제거 할 수 있습니다.

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);