2013-09-28 3 views
2

나는이 간단한 GUI 프로그램을 만들어 특정 문자 시퀀스의 모음과 자음을 센다.if-else 문에 어떤 문제가 있습니까?

다음
//I initialized these variables: 

    public static int vowels = 0, consonants = 0, charac = 0; 
    public static String outputStr; 
    public static String conso = "bcdfghjklmnpqrstvwxyz"; 
    public static String vow = "aeiou"; 

    //Here's the code for my "count" button 
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 

     String userInput = jTextField1.getText(); 
     userInput = userInput.toUpperCase(); 
     conso = conso.toUpperCase(); 
     vow = vow.toUpperCase(); 
     String wordInput[] = userInput.split(""); 

     vowels = 0; 
     consonants = 0; 
     charac = 0; 

     for(int i=0; i<wordInput.length; i++) { 
      for(int j=0; j<5; j++) { 
       char v = vow.charAt(j); 
       String VL = Character.toString(v); 
       if(VL.equals(wordInput[i])) { 
        vowels ++; 
        charac = 0;} 
       else { 
        charac += 1; } 
       } 

      for(int h=0; h<21; h++) { 
       char c = conso.charAt(h); 
       String CL = Character.toString(c); 
       if(CL.equals(wordInput[i])) { 
        consonants ++; 
        charac = 0; } 
       else { 
        charac += 1; } 
      } 

     } 

     String totalVow = Integer.toString(vowels); 
     String totalCons = Integer.toString(consonants); 

     jLabel5.setText(totalVow); 
     jLabel6.setText(totalCons); 


    //here's the if-else statement: 

     if (charac == 0) { 
      jLabel7.setText(" "); 
     } 
     else if (charac >= 1) { 
      jLabel7.setText("The sequence contains invalid characters."); 
     } 
     if (userInput.isEmpty()) { 
      jLabel7.setText("No input."); 
     } 
} 

무엇을의 : 카운터는 괜찮지 만, 나는 그 문자는 모음이나 자음 어느 때 메시지를 표시했던 경우-else 문에 문제가있어 ... 여기에 코드입니다

enter image description here

내가 특수 문자 또는 숫자가없는 문자의 "순서를"입력 : 것 같습니다. 그러나 그것은 여전히 ​​모음과 자음 이외의 다른 문자가있는 메시지를 표시합니다. if-else 문에 문제가 있습니까? 도움을 주셔서 감사합니다 :)

답변

2

틀린 문자가 있으면 틀린 문자를 계산하기위한 논리. 당신이하는 일은 : 캐릭터가 방금 테스트 한 캐릭터가 아닐 때마다 카운터를 증가시키는 것입니다. 즉, 입력에 포함 된 각 캐릭터에 대해 charac 변수가 증가합니다. 번! 그러나 다음 번에 해당 문자가 현재 테스트 된 모음 또는 자음과 일치 할 때 charac 변수를 0으로 재설정하십시오!

대신 개별적으로 자음과 모음의 각을 확인하기 위해 두 for 루프를 사용하여, 당신은 현재의 문자가 모음이나 자음 중 하나, 예를 들어, indexOf 여부를 확인하기 위해 내장 문자열 방법을 사용할 수 있습니다. 이렇게하면 수표는 각각 하나의 if 문으로 축소되므로 모음이나 자음이 아닌 경우에 "else"대소 문자를 사용하는 것이 훨씬 쉽습니다. 또한

for (int i = 0; i < userInput.length(); i++) { 
    char c = userInput.charAt(i); 
    if (vow.indexOf(c) != -1) { 
     vowels++; 
    } else if (conso.indexOf(c) != -1) { 
     consonants++; 
    } else { 
     charac++; // invalid character 
    } 
} 

대신 문자열 배열에 문자열을 분할 당신은 또한 charAt 방법을 사용할 수 있습니다.

+0

나는 이것을 시험해 보았다! 게다가 코드가 좀 더 짧아졌습니다. 고마워요! @tobias_k –

2

두 루프에서 자음을 찾는 사람과 모음을 찾는 사람을 각각 추가합니다. 여기에 if/else-if/else를 사용하고 싶습니다. 문자가 자음 또는 모음이 아닌 경우에만 charac에 추가하십시오.

또한 구아바 유틸리티를 살펴보십시오. 예를 들어, 다음은 모든 모음과 모든 자음을 얻는 방법입니다.

String vowels = "aeiou"; 
String consonants = "bcdfghjklmnpqrstvwxz"; 
String input = "mary had a little lamb"; 
String allVowels = CharMatcher.anyOf(vowels).retainFrom(input); 
String allConsonants = CharMatcher.anyOf(consonants).retainFrom(input); 
4

문제는 inner for 루프에 있습니다. 당신이 장소에 String.contains() 메소드를 사용하여, 모든 문자는 5 개 가지 모음의 각 테스트, 그래서 확실히 그것은 그들 중 적어도 4 일치하도록 실패하고 charac

for(int j=0; j<5; j++) { 
    char v = vow.charAt(j); 
    String VL = Character.toString(v); 
    if(VL.equals(wordInput[i])) { 
     vowels ++; 
     charac = 0;} 
    else { 
     charac += 1; 
    } 
} 

대신

을 증가합니다 내부 루프의

3

루프에 관련없는 코드를 넣습니다. 귀하의 루프는 다음과 같아야합니다 :

for(int i=0; i<wordInput.length; i++) { 
    char ch=wordInput.charAt(i); 
    if(Character.isLetter(ch)){ 
    if(isVowel(ch)){// make a method which return true if char is vowel. 
     vowel++; 
    } 
    else{ 
    consonent++; 
    } 
    } 
} 
관련 문제