2016-04-21 13 views
0

Also ich versuche, ein Programm mit JOptionPane zu programmieren, um einen Satz in Schwein Latin zu übersetzen Ich habe den Code meist herausgefunden, aber ich kann scheinen, um die Ausgabe zu erhalten, wenn es die Schweine Lateinische Version des zurückgibt Satz so jede mögliche Hilfe würde enorm seinNoch ein Schwein Latein Übersetzer

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; 
    } 
} 
} 

Antwort

0

das wahrscheinliche spezifische Problem der Frage ist, dass die Klasse PigLatinator nicht ist, wo im Code instanziiert. Man geht davon aus, dass es sein sollte:

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()); 

Allerdings tut der OP-Code zu viel Arbeit.

  • Split die Eingabe, indem Sie String.split anstelle der popWord Methode
  • Es scheint nicht für Worte zu berücksichtigen, die mit einem Vokal
  • Anfügen beginnen und mehr Arbeit löschen als nur anhängt

Nicht in den gleichen Klassen wie das OP, aber kann wie gewünscht wieder eingefügt werden. Dieser Code hat die Eingabe auskommentiert, um ein besseres Debuggen zu ermöglichen, aber leicht wiederhergestellt werden.

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(); 
} 

Beispiel Ausgabe:

Jetzt ist die Zeit für alle guten Menschen
owNay isyay hetay imetay orfay allyay oodgay eoplepay otay acquiesceyay otay leepsay

+0

Hey, dank schlafen einzuwilligen für die Hilfe! Es hat mir wirklich geholfen zu sehen, was zum Teufel ich falsch gemacht habe. Dieser Code scheint viel eleganter zu sein und nicht überall. –