Question

I was solving the Connected Sets problem on Amazon's Interview Street site https://amazon.interviewstreet.com/challenges and my code worked perfectly for the public sample test cases provided by the site, but I'm getting a NumberFormatException for the hidden test cases on line 25. Here is the part of my code that parses the input:

 public class Solution
 {
     static int [][] arr;
     static int num = 2;
     static int N;
     static String output = "";
     public static void main(String[] args) throws IOException
     {
         int T;
         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
         T = Integer.parseInt(reader.readLine());
         int i, j, k;

         for(i=0;i<T;i++) //the loop for each of the 'T' test cases
         {
            N = Integer.parseInt(reader.readLine()); //line 25
            arr = new int[N][N];

            for(j=0;j<N;j++) //the loops for storing the input 2D array
            {
                for(k=0;k<N;k++)
                {
                    arr[j][k] = Character.getNumericValue(reader.read());
                    reader.read();
                }
            }

I spent a lot of time trying to find what the problem is, but I've been unsuccessful at it. Thanks for your help in advance.

EDIT: The problem statement is given as follows on the site:

Given a 2–d matrix, which has only 1’s and 0’s in it. Find the total number of connected sets in that matrix.

Explanation: Connected set can be defined as group of cell(s) which has 1 mentioned on it and have at least one other cell in that set with which they share the neighbor relationship. A cell with 1 in it and no surrounding neighbor having 1 in it can be considered as a set with one cell in it. Neighbors can be defined as all the cells adjacent to the given cell in 8 possible directions ( i.e N , W , E , S , NE , NW , SE , SW direction ). A cell is not a neighbor of itself.

Input format: First line of the input contains T, number of test-cases. Then follow T testcases. Each testcase has given format. N [ representing the dimension of the matrix N X N ]. Followed by N lines , with N numbers on each line.

Output format: For each test case print one line, number of connected component it has.

Sample Input:

4

4

0 0 1 0

1 0 1 0

0 1 0 0

1 1 1 1

4

1 0 0 1

0 0 0 0

0 1 1 0

1 0 0 1

5

1 0 0 1 1

0 0 1 0 0

0 0 0 0 0

1 1 1 1 1

0 0 0 0 0

8

0 0 1 0 0 1 0 0

1 0 0 0 0 0 0 1

0 0 1 0 0 1 0 1

0 1 0 0 0 1 0 0

1 0 0 0 0 0 0 0

0 0 1 1 0 1 1 0

1 0 1 1 0 1 1 0

0 0 0 0 0 0 0 0

Sample output:

1

3

3

9

Constraint:

0 < T < 6

0 < N < 1009

Note that the above sample test cases worked on my code. The hidden test cases gave the exception.

Was it helpful?

Solution

Okay, so I modified my program to incorporate LeosLiterak's suggestion to use trim() and the new code is as follows:

public class Solution
{
    static int [][] arr;
    static int num = 2;
    static int N;
    static String output = "";
    public static void main(String[] args) throws IOException
    {
        int T;
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        T = Integer.parseInt(reader.readLine().trim());
        int i, j, k;

        for(i=0;i<T;i++)
        {
            N = Integer.parseInt(reader.readLine().trim());
            arr = new int[N][N];

            for(j=0;j<N;j++)
            {
                String [] temp = reader.readLine().trim().split(" ");
                for(k=0;k<N;k++)
                {
                    arr[j][k] = Integer.parseInt(temp[k]);
                }
            }

So instead of reading each character in the input matrix and converting it to an integer and storing, I now read the entire line and trim and split the string and convert each substring into an integer and store in my array.

OTHER TIPS

Copied from comments: try to remove all white characters like spaces, tabulators etc. These characters are not prohibited by goal definition but they cannot be parsed to number. You must trim them first.

Check if its number before parse to int.

Character.isNumber()

T = Integer.parseInt(reader.readLine()); This where the problem. when user try to give string and it convert into integer and run through loop? For eg : if user gives 'R' as char than how the integer conversion can happen and will the loop run further?? No right.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top