2

好的,所以基本上我很难找出为什么这不能像我认为的那样工作,并且需要帮助才能获得正确的输出。我已经尝试过几种方法来弄乱这种格式,但没有任何效果,我真的不明白为什么。以下是说明,然后是我的来源:

指示

编写一个循环,从标准输入中读取字符串,其中字符串为“land”、“air”或“water”。读入“xx​​xxx”(五个 x 字符)时循环终止。忽略其他字符串。循环后,您的代码应打印出 3 行:第一行由字符串“land:”组成,后跟读入的“land”字符串数,第二行由字符串“air:”组成,后跟“ air" 字符串读入,第三个由字符串 "water:" 后跟读入的 "water" 字符串的数量组成。每个字符串都应打印在单独的行上。

假设变量 stdin 的可用性,它引用与标准输入关联的 Scanner 对象。

资源:

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”。当读入“xx​​xxx”(五个 x 字符)时循环终止。其他字符串被忽略。循环后,您的代码应打印出 3 行:第一行由字符串“land:”组成,后跟读入的“land”字符串数,第二行由字符串“air:”组成,后跟“ air" 字符串读入,第三个由字符串 "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

你是对的 - 问题出在你指出的地方。解决方案是不再从标准输入读取:

此外,您必须在循环stdInput 之前声明,以便其范围达到 while 条件:

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 回答