Java 提供非零退出代码的BufferedReader

Java 提供非零退出代码的BufferedReader,java,java.util.scanner,bufferedreader,Java,Java.util.scanner,Bufferedreader,问题 一个简单的编程,包括从控制台读取N,T次数字,并对其执行简单的计算 约束条件: 一,≤ T≤ 一千 二,≤ N≤ 100000000 由于BufferedReader通常比Scanner快,所以我使用了它,但程序退出时带有非零退出代码,而使用Scanner解决了这个问题 由于两者在我的电脑上都能正常工作,我怀疑这是内存问题 问题: 我假设BufferedReader比Scanner快,这正确吗 BufferedReader是否使用更多内存?如果是,是错误的原因吗 代码: 使用Buffere

问题 一个简单的编程,包括从控制台读取N,T次数字,并对其执行简单的计算

约束条件:

一,≤ T≤ 一千

二,≤ N≤ 100000000

由于BufferedReader通常比Scanner快,所以我使用了它,但程序退出时带有非零退出代码,而使用Scanner解决了这个问题

由于两者在我的电脑上都能正常工作,我怀疑这是内存问题

问题:

  • 我假设BufferedReader比Scanner快,这正确吗
  • BufferedReader是否使用更多内存?如果是,是错误的原因吗
  • 代码:

    使用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();
        }
    }
    
    导入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 } }