2016-04-21 76 views
0

所以我想用JOptionPane編寫一個程序來將一個句子翻譯成豬拉丁語我的代碼主要是想通了,但當它返回豬的拉丁語版本時,我似乎可以得到輸出句話讓任何幫助將是巨大的又一個豬拉丁語翻譯器

package piglatin; 


import javax.swing.JOptionPane; 


public class Piglatin { 


public static void main(String[] args) 
{ 

    // String to hold input. 
    String input; 

    // Get a string to convert. 
    input = JOptionPane.showInputDialog("Enter a string and I will convert it to Pig latin."); 

    // Convert it to uppercase, for consistency. 
    input = input.toUpperCase(); 



    // Display the Pig Latin translation. 
    JOptionPane.showMessageDialog(null,"Your Phrase is: "+ pigLatin); 
} 

    public class PigLatinator 
    { 
private String original; // Original string 
private String pigLatin; // Pig Latin version 


public PigLatinator(String input) 
    { 
    // Variable to hold each word 
    String word; 

    // Save the input string. 
    original = input; 

    // Initialize pigLatin to an empty string. 
    pigLatin = ""; 

    // Trim all leading and trailing whitespaces. 
    StringBuilder sb = new StringBuilder(input.trim()); 

    while (sb.length() > 0) 
    { 
     // Remove the first word from sb and assign it to word. 
     word = popWord(sb); 

     // Convert the word to Pig Latin and add it to the 
     // Pig Latin sentence. 
     pigLatin = pigLatin + toPigLatin(word) + " "; 
     } 
    } 

    private String popWord(StringBuilder sb) 
    { 
    // Locate the first space, or the end of the string. 
    int index = 0; 
    while (index < sb.length() && sb.charAt(index) != ' ') 
    { 
    index++; 
    } 

    // Get the word from the beginning of sb. 
    String word = sb.substring(0, index); 

    // Delete the word from sb. 
    sb.delete(0, index+1); 

    // Return the extracted word. 
    return word; 
    } 

    private String toPigLatin(String word) 
    { 
    // Create a StringBuilder. 
    StringBuilder sb = new StringBuilder(word); 

    // Get the first letter of the word. 
    char first = sb.charAt(0); 

    // Append the letter to the end of the word. 
    sb.append(first); 

    // Append "AY" to the word. 
    sb.append("AY"); 

    // Delete the first letter. 
    sb.deleteCharAt(0); 

    // Return the word. 
    return sb.toString(); 
    } 

    /** 
    getPigLatin method 
    @return The Pig Latin version of the string. 
    */ 
    public String getPigLatin() 
    { 
    return pigLatin; 

    } 

    /** 
    getOriginal method 
    @return The original string. 
    */ 
    public String getOriginal() 
    { 
    return original; 
    } 
} 
} 

回答

0

問題的可能的具體問題是,類PigLatinator沒有在代碼實例化。一個假設它應該是:

input = JOptionPane.showInputDialog(...); 

// need to actually use the class 
PigLatinator pigLatin = new PigLatinator(input); 

// display the results of the PigLatinator's efforts 
JOptionPane.showMessageDialog(null,"Your Phrase is: "+ pigLatin.getPigLatin()); 

但是,OP代碼做了太多的工作。

  • 分割使用String.split而非popWord方法的輸入
  • 它似乎沒有考慮到以元音
  • 追加開頭的單詞,並不僅僅是追加
刪除更多的工作

不在與OP相同的類中,但可以根據需要重新插入。這段代碼將輸入註釋掉,以允許更好的調試,但很容易恢復。

public static void main(String[] args) 
{ 
    // String to hold input. 
    String input; 

    // Get a string to convert. 
    // input = 
    // JOptionPane.showInputDialog("Enter a string and I will convert it to Pig latin."); 

    input = "Now is the time for all good people to acquiesce to sleep"; 

    // debug output 
    System.out.println(input); 

    // split into worlds 
    String[] words = input.split("[\\s]+"); 

    // the output 
    StringBuilder output = new StringBuilder(); 

    // process all of the words into pig latin 
    for (String word : words) { 
     if (output.length() > 0) { 
      output.append(" "); 
     } 
     output.append(toPigLatin(word)); 
    } 

    // show the result 
    // JOptionPane.showMessageDialog(null, "Converted is " + output.toString()); 

    System.out.println(output); 
} 



static String toPigLatin(final String word) 
{ 
    Pattern pat = Pattern.compile("^[aeiouAEIOU].*$"); 
    final String ay = "ay"; 
    final String vowel_ay = "yay"; 

    StringBuilder sb = new StringBuilder(); 

    // if the word begins with a vowel, then it is the word + "yay"; 
    Matcher vowel = pat.matcher(word); 
    if (vowel.matches()) { 
     sb.append(word); 
     sb.append(vowel_ay); 
    } 
    else if (word.length() > 1) { 
     // otherwise, take the first letter, move to the end, and add "ay" 
     sb.append(word.substring(1)); 
     sb.append(word.substring(0, 1)); 
     sb.append(ay); 
    } 
    else { 
     // just append "ay" 
     sb.append(word); 
     sb.append(ay); 
    } 

    return sb.toString(); 
} 

輸出示例:

現在是所有善良的人默許睡覺
owNay isyay hetay imetay orfay allyay oodgay eoplepay Otay的acquiesceyay Otay的leepsay

+0

嘿,感謝時間尋求幫助!它真的幫助我瞭解我做錯了什麼。這段代碼似乎更加優雅,並不是全部。 –