2012-11-02 66 views
3

我必須採取一個字符串並將字符串轉換爲明膠。對明膠有三條規則,其中之一是:startsWith(String)方法和數組

如果英文單詞以元音開頭返回英語單詞+「yay」爲明膠版本。

所以我試着這樣做,誠實地期待得到一個錯誤,因爲startsWith()方法需要一個字符串參數,而不是一個數組。

public String pigLatinize(String p){ 
    if(pigLatRules(p) == 0){ 
     return p + "yay"; 
    } 
} 

public int pigLatRules(String r){ 
    String vowel[] = {"a","e","i","o","u","A","E","I","O","U"}; 
    if(r.startsWith(vowel)){ 
     return 0; 
    }   
} 

,但如果我不能使用數組我不得不做這樣的事情

if(r.startsWith("a")||r.startsWith("A")....); 
    return 0; 

並測試每一個元音字母不包括Y,它會佔用非常大量的空間,就我個人而言,我認爲它看起來相當混亂。

當我寫這個我想通過迭代測試它。

String vowel[] = new String[10]; 
for(i = 0; i<vowel[]; i++){ 
    if(r.startsWith(vowel[i]){ 
     return 0; 
    } 

我不知道迭代嘗試是否有意義。

+0

你的第二種方法很好。那有什麼問題?只需將「i Ashwin

+0

這工作得很好,但只有當我輸入一個以「a」開頭的字符串,而不是大寫字母A或任何其他元音字母時,它纔會檢查數組中的第一個字符串:(。 Like i when i輸入「是你」它返回「isyay你好」,我期望,但是當我試圖「是你的」返回時「Isay youray」,當它應該返回「Isyay youray」 – user1793532

+0

它適用於我的作品,它返回「 Isyay「爲」是「,請在問題中張貼您現在的代碼 – Ashwin

回答

1

您的代碼:

String vowel[] = new String[10]; 
for(i = 0; i<vowel[]; i++){ 
    if(r.startsWith(vowel[i]){ 
     return 0; 
    } 
} 

實際上是非常接近,應該工作(假設你居然把一些值陣列中)的解決方案。

你需要把什麼值放在裏面,就像你提到的那樣,你可以用元音的所有可能值填充數組。這些當然是

String[] vowel={"a","A","e","E","i","I","o","O","u","U"}; 

現在你有這樣的你想循環陣列之上(如你解決),做你的檢查:

public int pigLatRules(String r){ 
    final String[] vowels={"a","A","e","E","i","I","o","O","u","U"}; 
    for(int i = 0; i< vowels.length; i++){ 
     if(r.startsWith(vowels[i])){ 
      return 0; 
     } 
    } 
    return 1; 
} 

也有一些改進,你可以對這個雖然。有些是最佳做法,有些只是選擇,有些則是表現。

至於最佳做法,您目前正在從此函數返回一個int。你最好把這個函數的結果改爲布爾值(如果你沒有遇到它,我建議你查看它們)。

至於你所說的選擇,你不希望有一個與upercase和小寫元音的陣列。那麼這裏有一點信息。字符串上有很多方法http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html其中之一就是lowerCase(),你可以猜到它是一個整個字符串。如果你對你傳遞給你函數的工作做了這樣的工作,你就減少了你需要做的一半檢查。

有很多你凸輪進入,但這只是一點點。

+0

我評論了一個早期的帖子關於這個確切的信息,它似乎只是檢查數組的第一個值,或「a」,因爲當我嘗試「是你」時,它返回「areyay youay」,這是我預期和需要得到的,但是當我嘗試使用大寫字母a或其他元音時,例如「Isay youray」何時應該返回「Isay youray」已經返回「Isyay youray」,它似乎只是測試元音[0]字符串,然後跳過其餘的,或者也許idk,這一切都非常混亂,我很驚訝,我接近第一次迭代的正確答案我所做的方法。 – user1793532

+0

我實際測試了我寫的代碼,它工作的很好,所以我很驚訝你有任何問題。 –

1

將所有這些字符放在HashSet中,然後只執行一次查找來查看該字符是否有效並相應地返回0。

請通過HashSet插入/查找的一些示例。它應該是直截了當的。

希望這會有所幫助。

0

將所有的元音放在一個字符串中,抓住正在測試的單詞中的第一個字符,並查看您的字符是否在所有元音字符串中。