【问题标题】:while loop not working Java [duplicate]while循环不起作用Java [重复]
【发布时间】:2013-09-06 17:46:51
【问题描述】:

当我创建一个变量并将代码包装在一个 while 循环中时,它永远不会重复。这是我尝试过的代码示例。

String repeat = "y";
    Scanner keyboard = new Scanner(System.in);
    while (repeat == "y"){
        String word1 = "this";
        String word2 = "that";
        String word3 = word1 + word2;
        System.out.println(word3);
        for(int x = 10; x<20; x = x+1){

            word3 = word1 + word3;
            System.out.println(word3);
        }
        repeat = keyboard.nextLine();
    }

无论脚本末尾的输入是什么,它都会结束。有什么帮助吗?

【问题讨论】:

  • 使用Stringequals 方法比较String 值,而不是==,后者比较对象引用以确定它们是否引用同一个对象。
  • @rgettman 它们在这里是文字,除非代码中缺少某些东西。
  • @SotiriosDelimanolis 是的,它们是文字,所以 "y" 将被实习。出于这个原因,将输入while 循环。但是在repeat = keyboard.nextLine(); 之后,repeat 将不再是文字。无论哪种方式,这里都需要.equals
  • @rgettman 对,下次它会失败。我停止思考:)

标签: java string loops while-loop


【解决方案1】:

换行

 while (repeat == "y")

while("y".equalsIngnoreCase(repeat))  

keyboard.nextLine() ; 

keyboard.next();  

阅读How do I compare strings in Java? 会有所帮助。

【讨论】:

  • 我删除了我的答案,因为我检查了 javadoc,而 Scanner 没有 readLine() 方法。
  • @Marcelo 是的。它有 next() 方法来读取行。我已经更新了它。
【解决方案2】:

当您使用 '==' 比较字符串时。您正在比较对象引用。您本质上是在询问这两个对象是否相同,而不是比较字符串内容。尝试使用 String.compareTo(..) 方法。

例子:

while (repeat.compareTo("y") == 0) {

【讨论】:

  • 为什么compareTo 超过equals
  • 没有偏好,除了你可以从返回值中分离出额外的信息,否则 equals 也可以。
  • 如果你查看equalscompareTo的源代码你会发现equals肯定更快。
【解决方案3】:

问题可能来自您将两个对象与 = 进行比较的事实,但我想您想要做的是将字符串与 String 方法 equals 进行比较,所以它看起来像这样:

while(repeat.equals("y")){
...
}

【讨论】:

    【解决方案4】:

    切勿使用== 来比较字符串。

    试试这个:-

      while ("y".equalsIngnoreCase(repeat) )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多