2013-05-23 2 views
-3

Напишите рекурсивный, булевозначный метод, содержащийVowel, который принимает строку и возвращает true, если строка содержит гласную. Строка содержит гласный, если: Первый символ строки - это гласный, или Остальная часть строки (за пределами первого символа) содержит гласную Это для моей программирующей лаборатории Вот что у меня есть комплимент sas, что есть ошибка, и она не предлагает помощи.
Пожалуйста, помогите мне исправить ошибки.Что не так с моим кодом

boolean containsVowel(String s) 
{ 
    if(s.containsVowel("aeiouAEIOU")) 
    { 
     return true; 
    } 
    else 
    { 
     (s.substring(!=)); 
     return false 
    } 
} 

Компилятор ошибок (ы)

codelab анализ

Примечания: Вы, кажется, есть ошибка в компиляции

Вот еще один вопрос, который я сделал ранее:

Напишите рекурсивный, int -значный метод, len, который принимает строку и возвращает количество символов в строке. Длина строки: 0 Если строка представляет собой пустую строку (""). 1 больше, чем длина остальной части строки за пределами первого символа.

Вот ответ Мой Programing Lab ищет:

int len(String s) 
{ 
if(s.equals("")){ 
    return 0; 
} 
else { 
return (1+len(s.substring(1)));} 
} 
+1

Пройдитесь по вашему коду так, как если бы вы были виртуальной машиной Java, JVM, и вы увидите, что если вы ее скомпилируете, она будет работать вечно. –

+6

Какой компилятор просто говорит «есть ошибка»? Конечно, он должен сказать что-то полезное. –

+0

, так что я должен сказать под другой частью, что s! = AeiouAEIOU? –

ответ

0

Строки в конце Java точкой с запятой. Кажется, вам не хватает одного.

return false 
11

Этот код имеет несколько проблем.

  1. s.containsVowel. s - это строка, а строка Java не имеет метода containsVowel. Вы должны называть свой собственный метод containsVowel, а не тот, что String один (которого не существует).

  2. Если вы сделаете это изменение, это будет бесконечный рекурсивный метод, потому что у вас нет «базового футляра». Случай, из-за которого он выходит.

  3. (s.substring(!=)); не компилируется. Я не знаю, что вы даже пытаетесь сделать здесь.

  4. return false не заканчивается точкой с запятой. Это необходимо, если вы хотите, чтобы ваш код компилировался.

Вот так, вы должны подойти к этому алгоритм в псевдокоде

containsVowel(String input) 
    if (empty(input)) return false //the base case 
    char firstChar = getFirstCharOf(input) 
    return firstChar.isAnyOf("vowelCharacters") || containsVowel(inputWithoutFirstChar(input)) 
+0

Также обратите внимание: его метод 'containsVowel' не является статичным, поэтому он должен либо объявить его статическим, либо вызвать его на экземпляре любого класса, к которому это принадлежит. +1 для всего, особенно псевдокода (я мог бы использовать «или» вместо «||») –

+1

+1 для пункта номер три. Сделал мой день. –

+0

и для этого, где вы не можете сделать это в лаборатории программирования mt –

3

Давайте просто выбросить этот код и начать с базовых принципов. (Мое одно замечание для кода, которое у вас было, это то, что программы должны быть написаны ТОЧНО, как язык ожидает их написания - программы не читают читателей, они не знают, что вы хотите, они знают только то, что вы набрали, и такие вещи, как (s.substring(!=)); на 100% бессмысленны, даже если это имеет смысл в вашей голове.)


Идея рекурсивного метода состоит в том, что он имеет базовый регистр и условие повторения.

Базовый регистр для containsVowel - это пустая строка, "" - возвращает false.

Условие повторения состоит в том, что текущий символ не является гласным, мы возвращаем true, иначе мы вызываем containsVowel с строкой на один символ короче. Таким образом, каждый символ проверяется до тех пор, пока мы не найдем гласную, и если у нас закончится символ (базовый случай), мы прекратим.

Вы можете проверить, является ли текущий символ гласным, просмотрев s.charAt(0) и используя indexOf, чтобы узнать, содержится ли он в "aeiouAEIOU".

Вы можете назвать себя на шпагат один короткий, делая return containsVowel(s.substring(1)); (который создает строку из s начиная со второго символа, например, одна короче)

Вы можете увидеть, как написать метод сейчас?

0
  • containsVowel() недействительный метод для String.
  • заявления заканчиваются точкой с запятой (так return false становится return false;
  • s.substring(!=) является синтаксической ошибкой, поскольку != не является допустимым символом.
  • s.substring() создает новый String, и вы не захватывая результат того, что (после скорректированного символа, конечно) в любой переменной

Там более простой способ, чтобы расшифровать, если строка имеет гласный. - она ​​включает в себя регулярные выражения, набор гласных звуков, который вы хотите проверить (что о слове летать?) и может быть проверено с использованием a graphical regex checker. Я оставлю эту часть как упражнение для читателя.

+0

Это домашнее задание, поэтому ответ должен быть рекурсивным. – Patashu

+0

Я действительно говорил, что способ, основанный на регулярном выражении, был * проще *, а не то, что предписывалось. По крайней мере, теперь я понимаю, что для этого был голый 's.substring()'. – Makoto

+0

Да, если вы возьмете этот код, тогда ничего не будет правильным, потому что собеседник скажет, что вам нужно использовать подстроку! –

Смежные вопросы