3

// else if ステートメントについて助けが必要です。単語が母音で始まる場合は、単語の最後に way を追加します。単語が子音で始まる場合は、その子音を末尾に置き、ay を追加します。

私の問題は、最初の文字が母音の単語がある場合、子音があるかのように実行されることです。「are」と入力すると、「areway」ではなく「arewayreaay」と表示されます。

public class piglatin {
    public static void main(String[] args) {
        String str = IO.    readString();    
        String answer = "";

        if(str.startsWith("a"))
            System.out.print(str + "way");

        if(str.startsWith("e"))
            System.out.print(str + "way");

        if(str.startsWith("i"))
            System.out.print(str + "way");

        if(str.startsWith("o"))
            System.out.print(str + "way");

        if(str.startsWith("u"))
            System.out.print(str + "way");
        else{
            char i = str.charAt(0);
            answer = str.substring( 1, str.length());
            System.out.print(answer + i + "ay");
        }
    }
}
4

4 に答える 4

6
if(str.startsWith("a") || str.startsWith("e") || str.startsWith("i") ... (and so on)) {
  System.out.print(str + "way"); 
} else{
  char i = str.charAt(0);
  answer = str.substring( 1, str.length());
  System.out.print(answer + i + "ay");
}

または if / else if / else

説明:

//  combine all the if blocks together .. if you dont it checks for vowel 'a' and prints
//  'areay' then it checks for vowel 'u' and enters the else block .. where it again
//  operates on 'are' (check immutability of strings) gets charAt(0) i.e 'a' and prints
//  'rea' and since you concatenated 'ay' ... the final output = 'arewayreaay'
于 2012-10-17T21:02:59.057 に答える
2

主要なケースのそれぞれが同じ作業を行うことに注意してください。ifしたがって、代わりにそれらすべてを 1 つのブランチに折りたたむことができます。

if (str.startsWith("a") || str.startsWith("e") || ...
    System.out.print(str + "way");
else
{
    // do the substring and append "ay"

これらのブランチを折りたたむことは別として、問題はif、最初のステートメントの後の各ステートメントにelse:

if(str.startsWith("a"))
    System.out.print(str + "way");
else if(str.startsWith("e"))
    System.out.print(str + "way");
// ...

ブランチの1 つだけを実行する必要があります。しかし、 final で何が起こるかを考えてみてください。たとえば、最初のステートメントの結果として、if/elseすでに変更されています。chained を使用していないため、最終的な一連のテストに到達します。"are" ifif/else

if(str.startsWith("u"))
    System.out.print(str + "way");
else{

else文字列が で始まらないため、大文字と小文字が区別されます"u"。ただし、前のifステートメントで既に文字列を処理しています。

于 2012-10-17T21:03:27.343 に答える
1

中かっこがめちゃくちゃになっていると思います。'a'に対して"ifstart with"を実行しますが、 "u"に対して"else"も実行します...したがって、両方を取得します。あなたが意味するかもしれません:

public static void main(String[] args) 
{
    String str = IO.readString();
    String answer = "";

    if (str.startsWith("a"))
         System.out.print(str + "way");
    else if(str.startsWith("e"))
        System.out.print(str + "way");
    else if(str.startsWith("i"))
        System.out.print(str + "way");
    else if(str.startsWith("o"))
        System.out.print(str + "way");
    else if(str.startsWith("u"))
        System.out.print(str + "way");
    else
    {
        char i = str.charAt(0);
        answer = str.substring( 1, str.length());
        System.out.print(answer + i + "ay");
    }
}
于 2012-10-17T21:07:21.900 に答える
1

ここにあるのはスイッチではありません - はelse最終的なif. 最初のもの以外のそれぞれifをに置き換えるか、 jakub が提案したように条件を組み合わせます。else if

于 2012-10-17T21:03:24.190 に答える