我的While循环有什么问题?

时间:2014-07-24 19:35:20

标签: java loops while-loop

我尝试用Scanner制作一个小程序,但它说我的While循环不正确。错误消息是:'行无法解析为变量'

我尝试解决此问题,但是当我这样做时,会出现另一条错误消息!

在这里,我把代码:

import java.util.Scanner;

public class Application {
    public static void main(String[] args) {

        while (line != "yes") {

            Scanner input = new Scanner(System.in);
            System.out.println("Do you want some chocolate?");
            String line = input.nextLine();
            System.out.println("You are wrong!");
        }

        System.out.println("Yup! Good answer! ^.^");

    }
}

什么是不正确的?提前感谢您的理解。

4 个答案:

答案 0 :(得分:3)

您必须将line的定义放在while循环之外。它不是由您当前代码中的那一点定义的。顺便说一下,您还应该只初始化Scanner一次。

public static void main(String[] args) {
    String line = "";
    Scanner input = new Scanner(System.in); // Notice that I moved "input" here.
    while (!line.equals("yes")) {
        System.out.println("Do you want some chocolate?");
        line = input.nextLine();
        System.out.println("You are wrong!");
    }

    System.out.println("Yup! Good answer! ^.^");
}

另请注意,您必须使用String#equals而非==来比较String

执行此while循环的更好方法是使用do-while代替,如下所示:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String line;
    do {
        System.out.println("Do you want some chocolate?");
        line = input.nextLine();
        System.out.println("You are wrong!");
    } while (!line.equals("yes"));

    System.out.println("Yup! Good answer! ^.^");
}

正如Tom所说,这将排除使用空字符串初始化line的必要性。

正如Jonathan所述,您可能希望使用equalsIgnoreCase而非equals,以便用户可以输入"yes""YES""YeS"或任何其他案件的组合。但是,这纯粹是您的选择。

答案 1 :(得分:1)

line在声明之前使用。请在while循环之外声明line

答案 2 :(得分:0)

您已在while循环中声明line。这意味着在条件中使用它是不可用的。你应该在while循环开始之前声明它(和扫描仪)。

答案 3 :(得分:0)

在这种情况下,我想,你应该使用do while循环,因为在检查条件之前你必须至少问一次这个问题。我编写了以下解决方案并进行了测试,它确实有效

    import java.util.Scanner;

    public class dowhile {

        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            String line = "";
            do {

                System.out.println("Do you want some chocolate?");
                line = input.nextLine();
                System.out.println("You are wrong!");
            } while (!(line.equals("yes")));

            System.out.println("Yup! Good answer! ^.^");

        }
    }


有一点需要注意的是,你不能使用==或!=比较java中的字符串,因为字符串不是premitive,它们是对象。
我使用了一个String对象并使用了" equals"比较字符串值的方法。你也可以使用" compareTo"方法,它将比较实际的字符串对象而不是值。