文をブタのラテン語に変換しようとしていますが、正しい出力が得られないようです。予想される出力は、なじみのない人のために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;
}
}
すべてのヘルプは大歓迎です、ありがとうございました。
非常に多くのコードです。あなたはどこに問題があると思いますか?通常、このような問題を解決する方法は、問題を再現し、残っているものに焦点を当てるために厳密には必要ないものを削除することです。ここには、おそらく誤ってコメントされたコードがたくさんあります。インデントは完全なものです。混乱したコードはしばしばバグの多いコードなので、間違いを見るのは難しいです。あなたが助けを求めているならば、*特に*物事を清潔に保つ。 – tadman
私は 'scan.next()'への呼び出しを1つしか見ず、変数が単一のトークンであるときは 'line'という名前になりません。 'scan.nextLine()'は、実際には1行の入力を読み込んでいますか? – bcsb1001
translateSentenceとtranslatewordの2つの機能があります。両方ともあなたが合格しています。スペース上の文を分割し(そして翻訳語の入力用の特殊文字を削除して)、結果を連結してみませんか?編集:それはtranslateSentenceがセンテンスを単語の配列に分割し、単語がtranslateword(入力が1つの単語)でループされてから結果を連結することを意味します。 – Robert