do-while循环不能正常工作

时间:2013-02-22 02:43:35

标签: java do-while

好的,基本上我很难找到为什么这不起作用,因为我认为它应该,并需要帮助获得正确的输出。我曾尝试过几种方式搞乱这种格式,但没有任何作用,我真的不明白为什么。以下是说明,然后是我的来源:

说明

编写一个循环,从标准输入读取字符串,其中字符串是" land"," air"或" water"。当" xxxxx"时,循环终止。读入(五个x字符)。忽略其他字符串。在循环之后,你的代码应该打印出3行:第一行包含字符串" land:"其次是" land"读入的字符串,第二个由字符串组成" air:"其次是" air"读入的字符串,第三个字符串由" 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 个答案:

答案 0 :(得分:5)

您正在stdInput中存储用户信息,但同时检查stdin。试试这种方式

String stdInput = null;

do {
    stdInput = stdin.next();

    //your ifs....

} while (!stdInput.equalsIgnoreCase("xxxxx"));

答案 1 :(得分: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);

答案 2 :(得分:0)

我认为你想要stdInput.equalsIgnoreCase("xxxxx") == false而不是stdin.equalsIgnoreCase("xxxxx") == false

答案 3 :(得分:0)

你是对的 - 问题出在你指出的地方。解决方案是再次从stdin中读取:

此外,您必须在循环之前声明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
}