问题 一个简单的编程question,涉及从控制台读取N,T次数并对其进行简单计算。
约束:
1≤T≤1000
2≤N≤100000000
由于BufferedReader通常比Scanner快,我使用它但程序退出时使用非零退出代码,而使用Scanner解决了问题。
由于两者在我的计算机上运行正常,我怀疑这是一个内存问题。
问题:
代码:
使用BufferedReader,抛出错误
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int i=0; i<T; i++) {
int N = Integer.parseInt(br.readLine());
int res = (N/2)+1;
System.out.println(res);
}
br.close();
}
}
使用Scanner返回正确输出的代码:
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
int T = Integer.parseInt(sc.nextLine());
for (int i=0; i<T; i++) {
int N = Integer.parseInt(sc.nextLine());
int res = (N/2)+1;
System.out.println(res);
}
sc.close();
}
}
答案 0 :(得分:3)
答案 1 :(得分:1)
我的假设是BufferedReader比Scanner更快吗?
不是在这种情况下,因为程序的速度受到键入速度的限制。与此相比,Scanner和BufferedReader之间的任何差异都是微不足道的。
BufferedReader是否使用更多内存?
未指定。
如果是,是错误的原因吗?
出现错误的原因是什么?由于你没有发布你得到的错误,这个问题是无法回答的。但是我没有理由相信你有记忆问题。
答案 2 :(得分:-1)
我遇到了同样的错误(BufferedReader
上有错误)。这是因为你忘了把BufferedReader
放在try catch块中。在主要功能之后我也有throws IOException
,但这还不够。所以它不是内存问题。
正确的代码可能是这样的:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = null;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int i=0; i<T; i++) {
int N = Integer.parseInt(br.readLine());
int res = (N/2)+1;
System.out.println(res);
}catch(Exception e) {
e.printStackTrace();
}finally{
try{
br.close();
}catch ( Exception e){
e.printStackTrace();
}
} // end of try catch
}
}
祝你好运!