2

わかりましたので、基本的に、これが機能すると思うように機能しない理由を見つけるのに苦労しており、正しい出力を得るために助けが必要です。私はこの形式をいくつかいじってみましたが、何も機能せず、その理由が本当にわかりません。手順は次のとおりです。その後に私のソースが続きます。

手順

文字列が "land"、"air"、または "water" のいずれかである標準入力から文字列を読み取るループを作成します。"xxxxx" (5 つの x 文字) が読み込まれると、ループは終了します。その他の文字列は無視されます。ループの後、コードは 3 行を出力する必要があります。最初の行は文字列「land:」の後に読み込まれた「land」文字列の数で構成され、2 番目の行は文字列「air:」の後に「 air" 文字列が読み込まれ、3 番目の文字列は "water:" 文字列で構成され、その後に読み込まれた "water" 文字列の数が続きます。これらはそれぞれ別の行に出力する必要があります。

標準入力に関連付けられた Scanner オブジェクトを参照する変数 stdin が使用可能であると仮定します。

ソース:

int land = 0;
int air = 0;
int water = 0;

do
{
     String stdInput = stdin.next();
        if (stdInput.equalsIgnoreCase("land"))
        {
            land++;
        }else if (stdInput.equalsIgnoreCase("air"))
        {
            air++;
        }else if (stdInput.equalsIgnoreCase("water"))
        {
            water++;
        }
}while (stdin.equalsIgnoreCase("xxxxx") == false); // I think the issue is here, I just dont't know why it doesn't work this way
System.out.println("land: " + land);
System.out.println("air: " + air);
System.out.println("water: " + water);
4

4 に答える 4

5

ユーザー情報をに保存してstdInputいますが、 while チェックしますstdin。この方法を試してください

String stdInput = null;

do {
    stdInput = stdin.next();

    //your ifs....

} while (!stdInput.equalsIgnoreCase("xxxxx"));
于 2013-02-22T02:46:55.903 に答える
1

これは動作します:)

このコードを Codelab に送信したところ、問題なく動作します。

文字列が "land"、"air"、または "water" のいずれかである標準入力から文字列を読み取るループを作成します。"xxxxx" (5 つの x 文字) が読み込まれると、ループは終了します。その他の文字列は無視されます。ループの後、コードは 3 行を出力するはずです。最初の行は文字列 "land:" で構成され、その後に読み込まれた "land" 文字列の数が続き、2 番目の行は文字列 "air:" でその後に " の数が続きます。 air" 文字列が読み込まれ、3 番目の文字列は "water:" 文字列で構成され、その後に読み込まれた "water" 文字列の数が続きます。これらはそれぞれ別の行に出力する必要があります。

int land = 0;
int air = 0;
int water = 0;
String word = "";
while(!(word.equals("xxxxx"))) {
 word = stdin.next();
if(word.equals("land")) {
    land++;
}else if(word.equals("air")) {
    air++;
}else if(word.equals("water")) {
    water++;
} 
}
System.out.println("land:" + land);
System.out.println("air:" + air);
System.out.println("water:" + water);
于 2014-11-27T02:38:41.890 に答える
0

stdInput.equalsIgnoreCase("xxxxx") == falseの代わりに欲しいと思いますstdin.equalsIgnoreCase("xxxxx") == false

于 2013-02-22T02:46:50.580 に答える
0

あなたは正しいです - 問題はあなたが指摘したところです。解決策は、標準入力から再度読み取らないことです。

また、ループのスコープが while 条件に達するように、ループのstdInput に宣言する必要があります。

String stdInput = null;
do {
    stdInput = stdin.next();
    // rest of code the same
} while (!stdInput.equalsIgnoreCase("xxxxx"));

別の方法は、for ループです。

for (String stdInput = stdin.next(); !stdInput.equalsIgnoreCase("xxxxx"); stdInput = stdin.next()) {
    // rest of code the same
}
于 2013-02-22T02:47:08.543 に答える