4

我正在尝试学习 java,但我一直在尝试做一个涉及 Do While 语句的单个程序,它有两个条件。具体来说,我想要一个方法运行,直到用户写“是”或“否”。嗯,下面有我的东西,有什么问题吗?

    String answerString;
    Scanner user_input = new Scanner(System.in);
    System.out.println("Do you want a cookie? ");

    do{
    answerString = user_input.next();
    if(answerString.equalsIgnoreCase("yes")){
        System.out.println("You want a cookie.");
    }else if(answerString.equalsIgnoreCase("no")){
        System.out.println("You don't want a cookie.");
    }else{
        System.out.println("Answer by saying 'yes' or 'no'");
    }while(user_input == 'yes' || user_input == 'no');
    }
}}
4

2 回答 2

4

我会做类似于蒂姆的回答的事情。但是要按照您尝试的方式做事,您有很多问题需要解决:

(1) Java 中的字符串文字用双引号括起来,而不是单引号。

(2)user_input是一个Scanner。您无法将扫描仪与字符串进行比较。您只能将 aString与另一个进行比较String。因此,您应该answerString在比较中使用,而不是user_input.

(3) 切勿用于==比较字符串。StackOverflow 有 953,235 个 Java 问题,其中大约 826,102 个涉及尝试使用==比较字符串的人。(好吧,这有点夸张。)使用equals方法:string1.equals(string2).

(4) 写do-while循环的时候,语法是do, 后面跟着{, 后面跟着循环中的代码 , 后面跟着}, 后面跟着while(condition);. 看起来你把最后一个放}错了地方。}之前的属于whileelse所以不算;你需要另一个}之前while,而不是之后。

(5) 我认为您正在尝试编写一个循环,如果输入不是yesor ,则该循环会继续运行no。相反,您做了相反的事情:您编写了一个循环,只要输入 yesor ,它就会一直运行no。您的while情况应该类似于

while (!(answerString.equals("yes") || answerString.equals("no")));

[其实应该equalsIgnoreCase和其余代码保持一致。] !这里的意思是“不”,注意我必须把整个表达式放在括号后面!,否则!只会适用于第一部分表达。如果您尝试编写一个执行“循环直到 blah-blah-blah”的循环,则必须将其写为“Loop while !(blah-blah-blah)”。

于 2015-11-03T04:34:47.743 回答
2

我可能会选择一个do循环,它将继续接受命令行用户输入,直到他输入“是”或“否”答案,此时循环中断。

do {
    answerString = user_input.next();

    if ("yes".equalsIgnoreCase(answerString)) {
        System.out.println("You want a cookie.");
        break;
    } else if ("no".equalsIgnoreCase(answerString)) {
        System.out.println("You don't want a cookie.");
        break;
    } else {
        System.out.println("Answer by saying 'yes' or 'no'");
    }
} while(true);
于 2015-11-03T04:16:58.097 回答