2016-11-12 193 views
-1

這段代碼的意圖是讓它檢查String是否有元音;如果是這樣,它會加倍。我無法在此作業上使用StringReplaceStringBuilder或.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.equalschar是一種原始類型,沒有.equals方法。使用==比較字符:

if (ca == 'a')

+0

yikes,忘了那個。謝謝。 –

+0

@HarryYou樂於助人。如果這是有用的,請註冊並接受。 – nhouser9

+0

我做過了;我只是太低的代表,使其可見 –

0

ca類型是charca = str.charAt(i) + str.charAt(i);不有意義。

+0

我可以問是否有方法來改變價值約。我目前在語法選擇方面很失落,因爲我對這方面的知識不夠。我最近在三天前激烈地開始了Strings和Chars ... –

1

你這裏有幾個問題...

char

cachar,這意味着它包含一個字符。你不能讓它等於兩個字符

//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

是的,在這種情況下,會自動執行'ca'到'String'。但是你可能需要做'String vowel =「」+ ca + ca' –

+1

@RossDrew - 這不是自動裝箱。自動裝箱僅適用於將原始類型轉換爲其包裝類型。自動裝箱'char'給出一個'Character'而不是'String'。如果'ca'是一個'String'(就像Harry建議的那樣),那麼'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; 
} 

您的代碼存在問題:

  • 您將代碼返回給for循環。
  • 你在做元音double.I完全失去我走子,直到你比增加的雙重特徵,比追加其餘的子字符串的字符。
  • 之後我增加了索引,因爲我修改了字符串,下一個字符是相同的字符。
  • 一遍完成遍歷所有字符,而不是返回字符串。

我希望這是一個可以接受的答案。

Input: "Hello world"

Output: "Heelloo Woorld"

+0

保佑你,夥計,完全沒有想到子串。 + 1'd –

+0

快樂幫忙@HarryYou。請給予upvote而不是打字+ 1'd – denis

+0

我的代表很低,所以不顯示 –