我正在运行一个循环以接受输入。奇怪的是,我的程序似乎认为我的缓冲区应该为空时我有一个空字符。我写了一堂小课来演示。
NullCharTest:
package Scratch;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class NullCharTest {
public void testNullChar() throws IOException{
for ( int i = 0; i < 2; i++){
String s = readString();
while (s != null) {
s = readString();
}
System.out.println(s);
}
}
private String readString() throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
return in.readLine();
}
}
主要的:
package Scratch;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException{
NullCharTest nct = new NullCharTest();
nct.testNullChar();
}
}
输出类似于:
qwe null null [[编辑:输出仅是null,如Andreas指出的那样为null。]
输入“ e”后,我输入Ctrl + D。
为什么for循环在第二次运行时不接受输入?s第二次不是null-它是一个新的String引用,只是被要求引用readString()输出...因此,大概我的程序应该在for循环的第二次运行中等待用户输入...
谢谢!
这段代码是没有意义的:
String s = readString();
while (s != null) {
s = readString();
}
到while
循环结束时,s
它将为null,因为这是循环正常完成的唯一方法。
然后s
,您打印的值,即您打印的值null
。
这被一个for
迭代2次的循环所包围,这意味着它将始终结束null
两次打印。
的q w e
不输出,但你输入的输入。输出为null
和null
。始终,无论您按之前键入什么Ctrl+D
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句