2012-07-04 3 views
0

온라인 CPS 과정을 진행하고 있는데 한 줄에 모음 (대문자와 소문자)을 포함하는 코드를 작성해야합니다. 여기 내 코드입니다 :재귀를 사용하는 자바 모음 카운터

public static int countVowels(String s) 
    { 
     { 
     if (s.length() == 0) 
      return 0 + countVowels(s); 
     else if ((s.substring(0, 1) == "a") || (s.substring(0, 1) == "A")) 
      return 1 + countVowels(s.substring(1)); 
     else if ((s.substring(0, 1) == "e") || (s.substring(0, 1) == "E")) 
      return 1 + countVowels(s.substring(1)); 
     else if ((s.substring(0, 1) == "i") || (s.substring(0, 1) == "I")) 
      return 1 + countVowels(s.substring(1)); 
     else if ((s.substring(0, 1) == "o") || (s.substring(0, 1) == "O")) 
      return 1 + countVowels(s.substring(1)); 
     else if ((s.substring(0, 1) == "u") || (s.substring(0, 1) == "U")) 
      return 1 + countVowels(s.substring(1)); 
     } 

     return countVowels(s.substring(1)); 
    } 

그러나 나는 "유래"오류가있어 내가 할 모르겠어요. 오류는 종료 조건에 도달하지 못했음을 의미합니다. 나는 아직 배운 적이없는 것을 사용할 수 없으며 for 또는 while 문을 사용할 수 없습니다. 이것은 재귀 문제이기 때문에 사용할 수 없습니다.

도움이 필요합니까?

답변

2

s.length() == 0의 경우 무한 재귀가 발생합니다. 빈 문자열에는 0 개의 모음이 있으므로 5 행을 return 0;으로 편집해야합니다.주의해야 할 또 다른 사항은 문자열을 ==과 비교하는 것입니다. 이 연산자는 다른 용도로 사용됩니다. 대신 equals을 사용하십시오. 이것을보십시오, 예를 들면 : String comparison. 즉 s.substring(0, 1) == "a"는 사실 s.substring(0, 1).equals("a")

될한다, 다만 대신 모든 경우에 그것을 계산하는, 문자열의 첫 번째 문자를 저장하는 것처럼, 당신을 줄 것이라고 조언의 다른 조각이있다 (배에서이다). 또한 첫 번째 문자의 소문자를 얻을 수 있으므로 비교하는 사례를 두 번 줄일 수 있습니다. 또한 배열에 모음을 추가하십시오.이 코드는 DRY가 아닙니다.

+0

좋아, 그랬지 만 내 프로그램은 항상 출력으로 0을 반환합니다. – Panthy

+0

나는 당신이 의미하는 것을 정말로 이해하지 못한다 :/ – Panthy

+0

나는 당신이 쓴 것을 내 프로그램을 편집하기위한 코드로 변환하는 방법을 모른다. – Panthy

0

이것은 자바 스크립트에서 가능한 해결책입니다. 'something.html'파일을 만들어 브라우저에서 열어서 테스트 할 수 있습니다.

<html> 
<head></head> 
<body> 
<div id="input"> 
</div> 
<div id='answer'> 
</div> 
<script> 
var vowels = ['a','e','i','o','u']; 
var testInput = 'Hello this is just a test. Out with it.'; 

function Contains(value, inArray) { 
    var found = false; 
    for(var j=0, size = inArray.length; j < size; j++) { 
     if(value.toLowerCase() === inArray[j]) { 
     found = true; 
     } 
    } 
    return found; 
} 

var vowelCounter = 0; 
    for(var i=0, j = testInput.length; i < j; i++) { 
     if(Contains(testInput[i], vowels)) { 
     vowelCounter +=1; 
     } 
    } 

    var inp = document.getElementById("input"); 
    inp.innerHTML = 'Question <br/>' + testInput; 

    document.getElementById('answer').innerHTML = 'Number of Vowels: ' + vowelCounter; 

</script> 
</body> 
</html> 
+0

이 답변은 적어도 세 가지 이유로 나에게 당혹감을 안겨줍니다. 그 이유를 확인할 수 있습니까? –

+0

권. 나는 그것의 잘 쓰여지는 것, 가장자리의 경우를 보지 않는 것에 동의한다. 사용 된 알고리즘은 '무차별 대입'의 정의이며, 여러면에서 재귀 문제를 직접적으로 다루지는 않습니다. 그러나 그것을 사용하여, op는 논리가 옳다는 것을 적어도 확신하므로, 철저히 이해하고/재귀를 사용하는 측면에서 실수로 어디에서/무엇을하고 있는지 집중할 수 있습니다. – vishakvkt

+1

재귀 Java 질문이 이상하게 보입니다. –

0

지금까지 숙제를 완료했으면 좋겠다. 나는 짧은 방법으로 같은 문제를 해결 한 :

public class CountVowels { 
    private static String vowels = "aeiou"; 
    public static void main(String[] args){ 
     String s = "RohanAskedAQuestion"; 
     System.out.println(recursivelyCountVowels(s)); 
    } 

    private static int recursivelyCountVowels(String s) { 
     if(s==null||s.length()==0) 
     { 
      return 0; 
     } 
     if(vowels.contains((CharSequence) s.substring(0, 1).toLowerCase())){ 
      return 1+recursivelyCountVowels(s.substring(1)); 
     } 
     return 0+recursivelyCountVowels(s.substring(1)); 
    } 
} 

나는 사람이 어떤 제안이 있으면 알려 마십시오 그래서 나는 또한 자바를 배우고, 그것을 :) 도움이되기를 바랍니다. 감사합니다. .

0

어쩌면 그것은 조금 늦게하지만 여전히 :

public int recursiveCountVowels(String str,int count,int currentPosition) 
{ 
    str = str.toLowerCase(); 
    if(str.trim().length() == 0) 
     return count; 

    if(currentPosition == str.length()) 
     return count; 

    for(int i = currentPosition ; i < str.length();i++) 
    { 
     if(str.charAt(i) == 'a' || str.charAt(i) == 'e' || str.charAt(i) == 'i' || str.charAt(i) == 'o' || str.charAt(i) == 'u') 
      count++; 
      currentPosition++; 
    } 

    return recursiveCountVowels(str, count, currentPosition); 

} 
0

모음 수 (VC) - 입력 문자열에서 모음의 수를 돌려줍니다.

public static int vc(String s) 
{ 
    if(s.length() - 1 < 0) return 0; 
    return((("aeiou".indexOf((s.charAt(s.length()-1)+"").toLowerCase()) >= 0 ? 1 : 0)) 
      + vc((s = s.substring(0,s.length()-1)))); 
} 
관련 문제