Java 提供非零退出代码的BufferedReader
问题 一个简单的编程,包括从控制台读取N,T次数字,并对其执行简单的计算 约束条件: 一,≤ T≤ 一千 二,≤ N≤ 100000000 由于BufferedReader通常比Scanner快,所以我使用了它,但程序退出时带有非零退出代码,而使用Scanner解决了这个问题 由于两者在我的电脑上都能正常工作,我怀疑这是内存问题 问题:Java 提供非零退出代码的BufferedReader,java,java.util.scanner,bufferedreader,Java,Java.util.scanner,Bufferedreader,问题 一个简单的编程,包括从控制台读取N,T次数字,并对其执行简单的计算 约束条件: 一,≤ T≤ 一千 二,≤ N≤ 100000000 由于BufferedReader通常比Scanner快,所以我使用了它,但程序退出时带有非零退出代码,而使用Scanner解决了这个问题 由于两者在我的电脑上都能正常工作,我怀疑这是内存问题 问题: 我假设BufferedReader比Scanner快,这正确吗 BufferedReader是否使用更多内存?如果是,是错误的原因吗 代码: 使用Buffere
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();
}
}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
公共班机{
公共静态void main(字符串[]args)引发IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
int T=Integer.parseInt(br.readLine());
对于(int i=0;i
从JDK 7开始,BufferedReader使用的缓冲区比Scanner更大(我认为是8192c对1024c),因此它使用了更多内存,可以在大输入上实现更快的运行速度
这可能是您的问题的根源(也可能是为这个问题编写测试的人出了问题),因为我自己测试了您的BufferedReader代码,没有发现任何问题
我假设BufferedReader比Scanner快,这正确吗
在这种情况下不是这样,因为你的程序的速度受到你打字速度的限制。相比之下,Scanner和BufferedReader之间的任何区别都是微不足道的
BufferedReader是否使用更多内存
它没有指定
如果是,是错误的原因吗
这是什么错误的原因吗?由于您没有发布收到的错误,这个问题无法回答。但是我看不出有任何理由相信您有内存问题。我有与您相同的错误(BufferedReader
上的错误)。这是因为您忘记将BufferedReader
放入try-catch块中。我还让在主函数之后抛出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
}
}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
公共班机{
公共静态void main(字符串[]args)引发IOException{
BufferedReader br=null;
试试{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
int T=Integer.parseInt(br.readLine());
对于(int i=0;i在BufferedReader
案例中引发了什么错误?由于我提交了codechef,我无法知道错误。在我的计算机上运行它时,我没有收到任何错误。错误代码是NZEC。请仔细阅读文档,特别是它可以返回什么值。一直在使用它来练习codechef上的其他问题。你有过吗直到现在才出现错误,所以我假设输入格式如问题中所述。您是否使用扫描仪解决方案获得正确答案?解决方案看起来相同。8192个字符,而不是千字节。在new BufferedReader(Reader in,int sz)中将sz从其默认值更改为sz可能是一个好主意,然后查看它是否工作1)“受键入速度的限制”。-我将以java Mainimport 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
}
}