Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编译器无法退出while循环_Java_Loops_While Loop - Fatal编程技术网

Java 编译器无法退出while循环

Java 编译器无法退出while循环,java,loops,while-loop,Java,Loops,While Loop,我试着写一段超级简单的代码,问我们快到了吗,如果用户输入了,他们最终得到了答案,如果用户说的不是,是的,电脑一直在问,我们快到了吗 出于某种原因,当我运行下面的代码时,即使在第一次提示后键入yeah,计算机也会继续打印,我们快到了吗?无法通过环路 import java.util.Scanner; class FirstAttempt { public static void main(String args[]) { Scanner s= new

我试着写一段超级简单的代码,问我们快到了吗,如果用户输入了,他们最终得到了答案,如果用户说的不是,是的,电脑一直在问,我们快到了吗

出于某种原因,当我运行下面的代码时,即使在第一次提示后键入yeah,计算机也会继续打印,我们快到了吗?无法通过环路

    import java.util.Scanner;

    class FirstAttempt {

    public static void main(String args[]) {
    
    Scanner s= new Scanner(System.in);
    String a ="  ";
    
    System.out.println("are we nearly there yet?");
    a  = s.next();
    
  
    
    while ( a != "yeah" & a != "Yeah")
        
       {System.out.println("are we nearly there yet?");
           s = new Scanner(System.in);
        a = s.nextLine(); }
        
        System.out.println("finally");
      
      } }

要测试字符串是否相等,需要使用equals:

&是位运算-您可能需要逻辑运算&&和| |

此外,无需在循环内创建新的扫描仪。只需继续使用主方法顶部的一个。

无论第一个条件是真还是假,&运算符(也称为“按位and”)将计算所有条件。因此,当输入使第一个条件为假从而导致循环中断时,第二个条件仍然被计算为真并保持循环继续。您应该使用&

您必须更改 而a!=是啊是 啊 到 而a!=是的| | a!=是 啊
因为它不能同时是两个

问题就在于您在while中编写条件的方式

应用程序不会进入循环,因为您的条件总是错误的。基本上,这是因为您不是在比较字符串对象的值,而是比较它们实例的值。 在Java中,必须使用等于而不是运算符来比较一个字符串对象与另一个字符串对象!=或==

另外,我建议您使用&,而不是&。第一个是短路,这意味着第一个条件被评估,只有在它为真的情况下,第二个条件也被评估

然而,有一种更有效的方法可以做到这一点。看看这个:

while ( !a.equalsIgnoreCase("yeah")) )

yeah是字符串文字,从扫描仪返回的字符串不是。它们是不同的字符串,具有相同的文本。这是否回答了您的问题?虽然是的,同样的信号不起作用。a仅分配给扫描仪的输入,它不能等于字符串文字。是的,这是正确的,无论我使用| |还是&&它仍然不起作用,因此它一定是字符串问题。你有什么建议使字符串变量相同吗。或者知道如何将字符串值a与a进行比较literal@John参考经典:和埃里克的答案。您需要使用a.equalsyeah,因为equals实际上检查字符串的内容以检查它们是否相等,而==仅检查它们是否是相同的字符串对象。如前所述,使用运算符进行字符串比较!=or==将不起作用,因为变量“a”是字符串对象,而不是文字,因此必须使用“equals”函数。a可以不同于一个值,也可以同时不同于另一个值。&将产生与&&完全相同的结果。唯一的区别是&使用短路逻辑,而&不使用。在这两种情况下,a不能同时是yeah和yeah,也不能是字符串文字。
while ( !a.equalsIgnoreCase("yeah")) )