Handling Standard Input/Output Streams

Competitive programming is a popular discipline that involves solving algorithmic problems efficiently within a given amount of time. When coding solutions for these problems, handling standard input and output streams is a crucial aspect of writing correct and efficient code. In this article, we will discuss the basics of working with standard input/output streams in the context of competitive programming using the Java programming language.

Standard Input stream (System.in)

The standard input stream, System.in, allows the program to read input from the console or external sources. In competitive programming, the input is usually provided in a specific format, and it's essential to process it accurately.

To read input from the standard input stream in Java, we can use the Scanner class from the java.util package. The following code snippet demonstrates how to read integers from the input stream:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int num = scanner.nextInt();
        // Process the integer value


Here, we create an instance of the Scanner class by passing System.in as the parameter. We can then use the nextInt() method to read an integer from the input stream. After processing the input, we close the Scanner to free the resources.

Similarly, we can use other methods of the Scanner class like next(), nextLine(), nextDouble(), etc., to read different types of input from the standard input stream.

Standard Output stream (System.out)

The standard output stream, System.out, is used to display the output of the program. In competitive programming, the output is generally expected to be in a specific format.

To write output to the standard output stream in Java, we can use the print() or println() methods of the System.out object. The following code snippet demonstrates how to print output to the console:

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
        // Print other output values

Here, we use the println() method to print the string "Hello, world!" along with a newline character. If we only want to print the string without a newline character, we can use the print() method instead.

It's essential to format the output correctly as specified by the problem statement. You can use formatting techniques like printf() to display output with specific formatting requirements.

Redirecting input/output streams

During competitive programming contests, there might be a need to read input from files or write output to files instead of the standard input/output streams for testing purposes. Java provides a way to redirect the standard input/output streams easily.

To redirect the standard input stream to a file, we can use the < operator in the command line while running the program:

java Main < input.txt

Similarly, to redirect the standard output stream to a file, we can use the > operator:

java Main > output.txt

This way, the program reads input from input.txt and writes output to output.txt, providing a convenient way to test the program with custom inputs.


In competitive programming using Java, handling standard input/output streams is vital for reading input correctly, processing it efficiently, and producing the desired output. By utilizing the Scanner class for reading input from the standard input stream and the System.out object for writing output to the standard output stream, we can efficiently solve algorithmic problems. Additionally, redirecting the standard input/output streams can be useful for testing purposes during contests.

noob to master © copyleft