Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

BufferedReader giving non-zero exit code

Problem A simple programming question, involves reading a number N, T times from console and perform simple calculation on it.

Constraints:

1 ≤ T ≤ 1000

2 ≤ N ≤ 100000000

As BufferedReader is usually faster than Scanner, I used it but the program exited with Non-Zero Exit code whereas using Scanner resolved the issue.

Since both work fine on my computer, I suspect this is a memory issue.

Questions:

  1. Is my assumption that BufferedReader is faster than Scanner correct?
  2. Does BufferedReader use more memory? If yes, is it the reason for the error?

Code:

Using BufferedReader, throws error

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();
    }
}

The code using Scanner that returned correct output:

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();
    }
}
like image 527
Rishi Dua Avatar asked Aug 16 '14 19:08

Rishi Dua


People also ask

What is non zero exit code in Java?

exit() method exits current program by terminating running Java virtual machine. This method takes a status code. A non-zero value of status code is generally used to indicate abnormal termination. This is similar exit in C/C++.

What does BufferedReader return?

The read() method of a Java BufferedReader returns an int which contains the char value of the next character read. If the read() method returns -1, there is no more data to read in the BufferedReader , and it can be closed. That is, -1 as int value, not -1 as byte or char value.

What is BufferedReader BufferedReader new BufferedReader new InputStreamReader system in ));?

BufferedReader input = new BufferedReader (new InputStreamReader (System.in)); Once we have created a BufferedReader we can use its method readLine() to read one line of characters at a time from the keyboard and store it as a String object. String inputString = input. readLine();

What is the syntax of BufferedReader?

The buffered reader is linked with the input.FileReader file = new FileReader("input. txt"); BufferedReader input = new BufferedReader(file); Here, we have used the read() method to read an array of characters from the internal buffer of the buffered reader.


2 Answers

  1. As of JDK 7, BufferedReader uses a bigger buffer than Scanner (I think 8192c vs 1024c), so yes it uses more memory, and can make for a faster runtime on large inputs.
  2. This might be the source of your problem (or it might be that whoever wrote the tests for this problem has something wrong), since I tested your BufferedReader code myself and cannot see any problems with it.
like image 138
Ajk_P Avatar answered Oct 10 '22 19:10

Ajk_P


Is my assumption that BufferedReader is faster than Scanner correct?

Not in this case, as the speed of your program is limited by how fast you can type. Compared to that, any difference between Scanner and BufferedReader is insignificant.

Does BufferedReader use more memory?

It isn't specified.

If yes, is it the reason for the error?

Is it the reason for what error? As you didn't post the error you're getting, this question is unanswerable. However I don't see any reason to believe you have a memory problem.

like image 1
user207421 Avatar answered Oct 10 '22 20:10

user207421