Java 这两者之间的区别
我试图解决spoj上的问题,但我的答案是不接受给出错误的答案,我想知道这两段代码之间的区别 Spoj接受这一点Java 这两者之间的区别,java,Java,我试图解决spoj上的问题,但我的答案是不接受给出错误的答案,我想知道这两段代码之间的区别 Spoj接受这一点 public class Test { public static void main(String[] args) throws java.lang.Exception { java.io.BufferedReader r = new java.io.BufferedReader( new java.io.InputStreamReader(
public class Test {
public static void main(String[] args) throws java.lang.Exception {
java.io.BufferedReader r = new java.io.BufferedReader(
new java.io.InputStreamReader(System.in));
String s;
while (!(s = r.readLine()).startsWith("42"))
System.out.println(s);
}
}
class Test {
public static void main(String[] args) throws java.io.IOException {
new Test().universe();
}
public void universe() throws java.io.IOException {
System.out.println("Enter Number");
java.util.Scanner scan = new java.util.Scanner(System.in);
String input;
while (!(input = scan.next()).startsWith("42")){
System.out.println(input);
}
scan.close();
}
}
但Spoj不接受这一点
public class Test {
public static void main(String[] args) throws java.lang.Exception {
java.io.BufferedReader r = new java.io.BufferedReader(
new java.io.InputStreamReader(System.in));
String s;
while (!(s = r.readLine()).startsWith("42"))
System.out.println(s);
}
}
class Test {
public static void main(String[] args) throws java.io.IOException {
new Test().universe();
}
public void universe() throws java.io.IOException {
System.out.println("Enter Number");
java.util.Scanner scan = new java.util.Scanner(System.in);
String input;
while (!(input = scan.next()).startsWith("42")){
System.out.println(input);
}
scan.close();
}
}
问题出在这里第一个代码段逐行读取文件,而另一个代码段逐行读取令牌。如果每行有多个令牌,结果可能不同
最后,这两个代码都冒着读取文件而不检查是否还有要读取的内容的风险。在第一种情况下,它可能抛出一个
NullPointerException
,在第二种情况下,它抛出一个NoTouchElementException
,区别在于scan.next()
是一个阻塞调用-如果没有输入,调用将等待直到有输入
您需要将扫描仪的循环更改为:
while (scan.hasNext()) {
String input = scan.next();
if (input.startsWith("42")) {
System.out.println(input);
}
}
下一个是阅读下一个标记,也许你指的是下一行
另外,您正在后者中打印“输入数字”。很抱歉,我纠正了错误,将第一块代码重新格式化以便于阅读。scan.next();是不是阻塞了r.readLine()呢;两者都返回string,它们都将阻塞。从hasNext的文档中可以看出:“这个方法可能会在等待输入扫描时阻塞。”这就是我所想的。我的答案解释了这一点!什么是没有区别的是从控制台的阅读从任何其他。