我尝试用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! ^.^");
}
}
什么是不正确的?提前感谢您的理解。
答案 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"方法,它将比较实际的字符串对象而不是值。