2016-11-12 3 views
-1

Цель этого кода - заставить его проверить, имеет ли String гласный; если это так, он удваивает его. Я не могу использовать StringReplace, StringBuilder или .append по этому назначению. Я получаю сообщение об ошибке при запуске этого кода. Может ли кто-нибудь указать ошибку в моем синтаксисе.Как правильно форматировать этот код?

public String doubleVowels(String str) 
{ 
for (int i = 0; i < str.length(); i++) 
    { 
     char ca = str.charAt(i); 
     if (ca == "a" || ca == "e" || ca =="i" || ca == "o" || ca == "u") 
     { 
      ca = str.charAt(i) + str.charAt(i); 
      ca = Character.toString(ca); 
     } 
     return str; 
    } 
} 
+1

Какую ошибку вы получаете? – nhouser9

+0

Что вы ожидаете получить, когда вы добавите два символа вместе? – jaymmer

+0

Включите тестовый пример, например, образец ввода и выборки. – Enzokie

ответ

2

Вы используете char.equals. char является примитивным типом и не имеет метода .equals. Используйте == для сравнения символов:

if (ca == 'a') и т.д.

+0

yikes, забыл об этом. Благодарю. –

+0

@ ХарриВы счастливы помочь. Пожалуйста, поддержите и примите, если это было полезно. – nhouser9

+0

Я сделал; Я просто слишком низкий, чтобы сделать его видимым. –

0

типа ca является char, ca = str.charAt(i) + str.charAt(i); не делает смысл.

+0

Могу ли я спросить, есть ли способ изменить значение ок. В настоящее время я теряюсь в своем выборе синтаксиса, поскольку я не очень хорошо разбираюсь в этой области. Недавно я начал интенсивно работать в Strings and Chars около трех дней назад ... –

1

У вас есть несколько проблем здесь ...

char типа

ca является char, что означает, что она содержит один символ. Вы не можете сделать его равным двум символов

//a char plus a char is a char, not two chars (which is a String) 
ca = str.charAt(i) + str.charAt(i); 

Вы не можете хранить в течение аргументов Метод char

//You are creating a String and trying to store it in ca, a char 
ca = Character.toString(ca); 

в String и возвращаемые значения

Вы возвращаете str переданный вашему методу без его изменения, и вы делаете это после того, как первый символ был протестирован (потому что он находится внутри цикла, который проходит через str: -

//The String returned will always be the same as the one passed in 
return str; 

Java цитирует

Наконец, вы используете двойные кавычки ("), что означает String и пытается сравнить его с char.Вы должны использовать одиночные кавычки ('), так что вы сравниваете char с char: -

//This is the source of "error: incomparable types" 
if (ca == "a" || ca == "e" || ca =="i" || ca == "o" || ca == "u") 

Решение

Вы хотите вернуть новую строку, которая является ca или является ca дважды, если это гласный: -

String newString = "" + ca; //ca added once 
if (ca == 'a' || ca == 'e' || ca =='i' || ca == 'o' || ca == 'u') 
    newString += ca; //ca added again if it's a vowel 

Вы также хотите добавить этот новый String к полному String когда-либо цикла петли затем вернуть его после всех циклов: -

String changedString = ""; 
for (int i = 0; i < str.length(); i++) 
{ 
    //the above code 
    changedString += newString; 
} 
return changedString; 
+0

Прошу прощения, но будет что-то вроде «String vowel = ca + ca;» работа после ca была преобразована в строку? –

+0

Да, в этом случае autobox 'ca' будет' String'. Но вам может понадобиться 'String vowel =" "+ ca + ca' –

+1

@RossDrew - Это не автобоксинг. Автообновление применяется только к преобразованию примитивного типа в его тип-обертку. Автобоксирование символа 'char' дает' Character' не 'String'. Если 'ca' является' String' (как предлагает Гарри), то 'ca + ca' является конкатенацией строк ... –

-1

Ваш код имеет несколько ошибок следующий код будет работать

public static String doubleVowels(String str) 
{ 
    for (int i = 0; i < str.length(); i++) 
    { 
     char ca = str.charAt(i); 
     if (ca == 'a' || ca == 'e' || ca =='i' || ca == 'o' || ca == 'u' || 
     ca == 'A' || ca == 'E' || ca =='I' || ca == 'O' || ca == 'U') 
     { 
      str = (str.substring(0,i)+ca+ca+str.substring(i+1)); 
      i++; 
     } 
    } 
    return str; 
} 

Проблемы с кодом:

  • Вы возвращаете код внутри цикла.
  • Вы полностью потеряли при создании двуглавого гласного. Я беру подстроку до тех пор, пока вы не нажмете символ, а не добавьте двойной символ, а затем добавьте оставшуюся подстроку.
  • Я увеличиваю индекс после этого, так как я изменил строку, а следующий символ - тот же символ.
  • После выполнения повторения всех символов, чем я возвращаю строку.

Надеюсь, это приемлемый ответ.

Input: "Hello world"

Output: "Heelloo Woorld"

+0

Благослови вас, чувак, совсем не думал о подстроках. + 1'd –

+0

С удовольствием помогите @ Харри. Пожалуйста, дайте upvote, а не печатайте + 1'd – denis

+0

. Моя репутация низкая, поэтому она не отображается –

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