2016-04-21 77 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

嘿,感谢时间寻求帮助!它真的帮助我了解我做错了什么。这段代码似乎更加优雅,并不是全部。 –