Java新手求助:如何让while循环运行至输入"quit"时终止?
Java中持续接收输入直到输入"quit"终止的问题解决
你的两段代码都犯了同一个Java新手常见的错误:用==比较字符串内容。在Python中,==可以直接比较字符串的内容,但Java里==比较的是两个字符串对象的内存引用地址,而不是实际内容。即使两个字符串内容完全相同,只要它们是不同的对象,==就会返回false,这导致你的循环无法正常终止。
第一段代码修正
原代码的循环条件s1 != "quit"永远为true,因为输入的字符串和字面量"quit"是不同的对象。需要把比较方式换成equals()方法,它专门用来比较字符串的内容:
import java.util.Scanner; class HelloWorld { static String s1; public static void main(String[] args) { Scanner in = new Scanner(System.in); do { s1 = in.next(); } while (!s1.equals("quit")); System.out.println(s1); } }
如果想忽略大小写(比如输入"Quit"或"QUIT"也能终止),可以用equalsIgnoreCase():
while (!s1.equalsIgnoreCase("quit"));
第二段代码修正
同样的,原代码中的if (s1=="quit")和while (s1!="quit")都用了错误的比较方式,导致输入"quit"时无法触发break,还会继续执行后续的输入语句引发错误。修正这两处的比较逻辑:
import java.util.Scanner; class HelloWorld { static String s1; static String s2; static int s3; public static void main(String[] args) { Scanner in = new Scanner(System.in); do { s1 = in.next(); if (s1.equals("quit")){ break; } s2 = in.next(); s3 = in.nextInt(); } while (!s1.equals("quit")); System.out.println("Terminate"); } }
额外建议
为了避免NullPointerException(虽然在你的do-while逻辑中s1不会为null,但养成好习惯很重要),可以把字符串字面量放在前面进行比较:
- 把
!s1.equals("quit")换成!"quit".equals(s1) - 把
s1.equals("quit")换成"quit".equals(s1)
这样即使s1是null,也不会抛出异常,因为字面量"quit"永远不会为null。
内容的提问来源于stack exchange,提问作者Sophia
相关产品推荐
相关产品推荐

