2

我正在尝试编写这种方法,它会一直从用户那里读取,直到输入“退出”这个词。我尝试使用 break 和 for 循环;它没有用。我正在尝试使用while,但即使输入“exit”这个词也不会停止。任何想法如何解决这一问题?谢谢。

public void read(Scanner scanner){

while(3<4){
String in = scanner.nextLine();
Scanner scanner_2 = new Scanner(in);

String name = null;

if(scanner_2.hasNext()){
  //create and add the user to the user container class
  name = scanner_2.next();
  System.out.println(name);
}

if(name == exit)
//stop or break the while loop
}
}
4

4 回答 4

9

name == exit是错的。

你要

name.equals(exit)

或者

name.equals("exit")

分别取决于 exit 是变量还是字符串文字。在 Java 中,==表示引用相等(例如,这两个引用是否指向内存中的相同地址),而 . equals表示对象等价,通常overriden在开发人员的类中。

于 2012-05-12T02:09:30.053 回答
5
if(name == exit)

错了,那是真的。

但是请确保在比较两个字符串时,当一个字符串是常量时,例如,在比较时"exit"确保它排在第一位。

即它应该被比较为

if ("exit".equals(name))

不像下面的方式

if (name.equals("exit"))

将“exit”作为第一个值的主要原因是,如果 name 是null那么它不会触发NullPointerException,但是如果我们将name其作为第一个对象进行比较,那么如果 name 为 null 那么它将触发该NullPointerException异常,因此请确保在任何时候未来。

于 2012-05-12T02:55:17.903 回答
3

阿米尔斯的回答是 100% 正确的。此外,在 while 循环中使用 true ,我认为在这种情况下使用 else...if 语句会更好。更具可读性,这就是为什么:)

于 2012-05-12T02:22:22.530 回答
3

假设String exit = "exit";在类级别的某处声明:

name == exit 

检查被引用的name对象和被引用的对象exit是否相同。你想要什么被引用的对象的和被引用的对象的是否相同。nameexit

你这样做

if(name.equals(exit))

也就是说,代码中有很多可以改进的地方。我了解您可能正在编写此代码来学习 Java,但仍然可以进行一些小的更改使代码更具可读性。

此外,根本不需要您使用的第二台扫描仪。

以下代码将与您的代码执行相同的操作,但更小且更具可读性。

    String name = "";
    while(!name.equals("exit")) {
        if(scanner.hasNext()) {
            //create and add the user to the user container class
            name = scanner.next();
            System.out.println(name);
        }

    }

实际上,他的代码可以进一步改进为:

String name = null;
while(scanner.hasNext() && !(name = scanner.next()).equals("exit")) {
    System.out.println(name);
}

但我认为你正在学习,当你在学习时,这可能有点太多了。

于 2012-05-12T02:23:28.187 回答