2016-05-28 9 views
1

Ich mache einen Pig Latin-Übersetzer, der die Eingabe des Benutzers in Pig Latin übersetzt. Ich habe alles herausgefunden, wenn das Wort mit einem Vokal beginnt und wenn es den ersten Buchstaben nicht in der Mitte platziert. Wenn es jedoch um Konsonantencluster geht (die Gruppe von Zeichen vor dem ersten Vokal im Wort), kann ich einfach nicht herausfinden, wie man sie zu ihrer eigenen Variablen zusammenfasst. Ich benutze eine for-Schleife, um den Buchstaben für die erste Variable zu scannen, und dann versuche, alle diese Strings in seine eigene Variable zu klumpen, um sie dann in die Mitte des Wortes zu setzen.Pig Latin Translator - Konsonantencluster finden.

Hier ist der Code, den ich bisher habe:

import java.util.Scanner; 
public class Mission4 
{ 

    public static void main(String[] args) 
    { 
     Scanner in = new Scanner (System.in);    

    System.out.println("Please enter word to convert to Piglatin:"); 
    String userInput = in.nextLine(); 

    int firstV = 0;    

    char firstCh = Character.toLowerCase(userInput.charAt(0)); 

    do 
    { 

    if (firstCh == 'a' || firstCh == 'e' || firstCh == 'i' || firstCh == 'o' || firstCh == 'u') //if userInput starts with vowel 
    { 
     String pigTalk = userInput + "ay"; 
     System.out.println(pigTalk); // adding 'ay' to the end of their input 
     System.out.println("Enter another word to convert to piglatin, otherise press \"Q\" to exit."); 
     userInput = in.nextLine(); 
    } 

    else //if userInput doesn't begin with vowel 
    {   
     for (int i = 0; i < firstV; i++) 
     {       
      char ch = userInput.charAt(i); 

      if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u'); 
      {    
       firstV = Character.subString(ch); 
      }              
     }                 
     String firstCluster = userInput.substring(0,firstV.length); 
     String secondCluster = userInput.substring(firstV.length,userInput.length()); 
     System.out.println(secondCluster + firstCluster + "ay"); //Printing out their piglatin 
     System.out.println("Enter another word, or type \"Q\" to exit   program."); 
      userInput = in.nextLine(); 
     } 
     } while (!userInput.equals("Q")); //Giving user an exit option  
    } 
} 

Können Sie irgendeinen Rat anbieten? Jede Hilfe wird geschätzt.

+0

zu starten: 1) Die Character-Klasse hat keine SubString-Methode. 2) Ints haben kein Längenfeld oder irgendein Feld für diese Angelegenheit. –

Antwort

1

Versuchen Sie zuerst, Ihren Code in kleinere Funktionen zu organisieren und logische Einheiten zu bilden. Dies erleichtert es Ihnen und anderen zu verstehen, was ein Programm macht und was es falsch macht.

Mehrere Fehler in Ihrem Programm:

  • firstV auf 0 gesetzt ist, und so diese Schleife sofort beendet: for (int i = 0; i < firstV; i++)
  • Die Schleife unterbrochen ist (nicht kompiliert selbst)

Was die Schleife tun muss, besteht darin, vom zweiten Zeichen bis zum Vokal zu iterieren.

Hier ist die korrigierte Hauptlogik auf eine Funktion extrahiert, und auch eine Funktion Helfer:

public String toPigLatin(String word) { 
    if (isVowel(word.charAt(0))) { 
     return word + "ay"; // actually, wikipedia says you should append "yay", not "ay" 
    } 
    for (int i = 1; i < word.length(); i++) { 
     if (isVowel(word.charAt(i))) { 
      return word.substring(i) + word.substring(0, i) + "ay"; 
     } 
    } 
    return word + "ay"; 
} 

public boolean isVowel(char c) { 
    c = Character.toLowerCase(c); 
    return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'; 
} 
+0

Laut [wikipedia] (https://en.wikipedia.org/wiki/Pig_Latin#Rules) sollten Wörter, die mit Vokal beginnen, mit "yay" (oder "way") versehen werden. Ich mag dein Fallback für alle Konsonanten. Ist das für Wörter wie "Grrray", "Hmmmay" und "Zzzzay"? Wenn ich das sehe, denke ich, dass das "Yay" -Suffix auch dort besser funktionieren könnte. ;-) – Andreas

+0

OP benutzt "ay" suffix, das habe ich einfach behalten. Aber danke, es ist wahrscheinlich erwähnenswert, fügte einen Kommentar dafür im Code hinzu. – janos

0

Hier ist ein Programm mit, dass ein String in Pig Latin konvertiert:

import java.io.*; 
    class Test1 
{ 
public static void main(String args[])throws IOException 
    { 
     BufferedReader br=new BufferedReader (new InputStreamReader(System.in)); 
     System.out.print("Enter any word: "); 
     String s=br.readLine(); 

     s=s.toUpperCase(); //converting the word into Uppercase 
     int l=s.length(); 
     int pos=-1; 
     char ch; 

     for(int i=0; i<l; i++) 
     { 
      ch=s.charAt(i); 
      if(ch=='A' || ch=='E' || ch=='I' || ch=='O' || ch=='U') 
      { 
       pos=i; //storing the index of the first vowel 
       break; 
      } 
     } 

     if(pos!=-1) //printing piglatin only if vowel exists 
     { 
      String a=s.substring(pos); //extracting all alphabets in the word beginning from the 1st vowel 
      String b=s.substring(0,pos); //extracting the alphabets present before the first vowel 
      String pig=a+b+"AY"; //adding "AY" at the end of the extracted words after joining them 
      System.out.println("The Piglatin of the word = "+pig); 
     } 
     else 
      System.out.println("No vowel, hence piglatin not possible"); 
    } 
}