2017-11-29 4 views
-2

文をブタのラテン語に変換しようとしていますが、正しい出力が得られないようです。予想される出力は、なじみのない人のためにethay ainray inay ainspay aysstay ainlymay inay ethay ainplay普通の文章をブタのラテン語に変換できません

であるのに対し、例えば入力 the rain in spain stays mainly in the plainが私の現在のコードでethay ethay ethayの出力が得られ、ラテン豚の基本的なルールは以下のとおりです。

単語が子音で始まる場合、取ります最初の母音までの子音は、母音の最後に移動します。最後に最後にayを追加します。 (だからクリケットはicketcrayになります)

単語が母音で始まる場合は、末尾にayを追加するだけです。 (リンゴはリンゴになります)

yが単語の最初の文字であれば、それを子音として扱います。そうでない場合は母音として使用されます。 (若いがoungyayになると、システムがystemsayなる) 次のように私のコードは次のとおりです。

import java.util.Scanner; 
public class PigLatin{ 
public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    String line = scan.next(); 
    String piglatin = translateSentence(line); 
    System.out.println(piglatin); 
} 
public static String translateSentence(String line){ 
    for (int i =0; i < line.length(); i++) { 
     char c = line.charAt(i); 
     //for loop to analyze each word 
     if (Character.isAlphabetic(c)) { 

     //if (i <='a' || i<='A' || i>='z' || i>='Z'){ 
      String piglatin = translateword(line);     
    return piglatin;  
     } 
} 
    return line; 
} 


public static String translateword(String line) { 
Scanner scan = new Scanner(System.in); 

    int position = firstVowel(line);  
    String words = ""; 
    String output = ""; 
    for(int i = 0; i<line.length();i++){ 
     words = ""; 
     if (firstVowel(line) == 0) { 
      words = line + "-way"; 

     } else if (firstVowel(line) == -1) { 
      words = line + ""; 

     } else {   
      String first = line.substring(position); 
      String second = line.substring(0,position) + "ay"; 
      words = first + second; 

     }  
    output = output + " " + words; 
    //words = ""; 
    } 
    return output; 
} 

public static int firstVowel(String line) { 

    for (int i = 0; i < line.length(); i++) { 

    if (line.charAt(i) == 'a' || line.charAt(i) == 'e' 
     || line.charAt(i) == 'i' || line.charAt(i) == 'o' 
     || line.charAt(i) == 'u') { 

     return i; 
    } 
    } 
    return -1; 
} 
} 

すべてのヘルプは大歓迎です、ありがとうございました。

+0

非常に多くのコードです。あなたはどこに問題があると思いますか?通常、このような問題を解決する方法は、問題を再現し、残っているものに焦点を当てるために厳密には必要ないものを削除することです。ここには、おそらく誤ってコメントされたコードがたくさんあります。インデントは完全なものです。混乱したコードはしばしばバグの多いコードなので、間違いを見るのは難しいです。あなたが助けを求めているならば、*特に*物事を清潔に保つ。 – tadman

+0

私は 'scan.next()'への呼び出しを1つしか見ず、変数が単一のトークンであるときは 'line'という名前になりません。 'scan.nextLine()'は、実際には1行の入力を読み込んでいますか? – bcsb1001

+0

translateSentenceとtranslatewordの2つの機能があります。両方ともあなたが合格しています。スペース上の文を分割し(そして翻訳語の入力用の特殊文字を削除して)、結果を連結してみませんか?編集:それはtranslateSentenceがセンテンスを単語の配列に分割し、単語がtranslateword(入力が1つの単語)でループされてから結果を連結することを意味します。 – Robert

答えて

0

最初にあなたのたびに1つの単語を渡し、単語を翻訳し、複数回呼び出すためにラインを翻訳修正し、次にライン

public String[] getWords(String line) { 
    String list[]=new String[100]; 
    int j=0; 
    int end; 
    end=line.indexOf(' '); 

    while (end!=-1) { 
     list[j]=line.substring(0, end); 

     line=line.substring(end+1,line.length()); 
     j++; 

     end=line.indexOf(' '); 

    } 
    list[j]=line.substring(0,line.length()); 

    return list; 
} 

から単語のリストを取得するために別の関数を記述します。 translateWord()は、正しく翻訳された単一の単語を返します。 translateLineは次のように変更されます。

if (Character.isAlphabetic(c)) { 
    String wordList[]=getWords(line); 
    String piglatin=""; 
    int i=0; 
    while(!line[i].equals("")) { 
     piglatin = piglatin+translateword(word[i]); 
     i++; 
    }     
    return piglatin; 
} 
関連する問題