Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting a NumberFormatException

I was writing some code for an interviewstreet.com challenge My code gives a NumberFormatException

import java.io.*;

public class BlindPassenger
{
  public static void main(String [] args) throws IOException
  {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line = br.readLine();
    int t,n;
    //System.out.println(line);
    t = Integer.parseInt(line);
    for(int i=0;i<t;++i)
    {
      line = br.readLine();
      n = Integer.parseInt(line); --n;
      if(n == 0)
      {
        System.out.println("poor conductor");
      }
      else
      {
        char direction='l',seat_posn='l';
        int row_no = 0, relative_seat_no = 0;
        row_no = (int) Math.ceil(n/5.0);
        relative_seat_no = n % 5;
        if(row_no % 2 == 0)
        {
          //even row, need to reverse the relative seat no
          relative_seat_no = 6 - relative_seat_no;
        }

        if(relative_seat_no < 3)
        {
          direction = 'L';
          if(relative_seat_no == 1) seat_posn = 'W';
          else seat_posn = 'A';
        }
        else
        {
          direction = 'R';
          if(relative_seat_no == 3) seat_posn = 'A';
          else if(relative_seat_no == 4) seat_posn = 'M';
          else seat_posn = 'W';
        }

        System.out.println(row_no + " " + seat_posn + " " + direction);
      }
    }
  }
}

Here is the test case that they use

3 
1 
2 
3 

Output: 
poor conductor 
1 W L 
1 A L

There seems to be a trailing space or something at the end of each line that causes the exception.

$ java BlindPassenger <input00.txt
Exception in thread "main" java.lang.NumberFormatException: For input string: "3
 "
        at java.lang.NumberFormatException.forInputString(NumberFormatException.
java:65)
        at java.lang.Integer.parseInt(Integer.java:492)
        at java.lang.Integer.parseInt(Integer.java:527)
        at BlindPassenger.main(BlindPassenger.java:11)

This has taken up half an hour and I don't know how to fix this. Kills the fun of the event doesn't it. Can someone tell me what I'm doing wrong.

like image 623
nikhil Avatar asked Feb 26 '12 16:02

nikhil


2 Answers

Integer.parseInt() can't handle strings that don't fit its expected format, as you've found out. You could trim() the string before you parse it:

t = Integer.parseInt(line.trim());

This gets rid of leading and trailing whitespace.

like image 76
Mark Peters Avatar answered Sep 23 '22 20:09

Mark Peters


You have to trim the string

import java.io.*;

public class BlindPassenger
{


    public static boolean isEmpty(final String string)  
            {  
               return string == null  || string.trim().isEmpty();  
            }  
  public static void main(String [] args) throws IOException
  {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line = br.readLine();
    int t,n=0;
    //System.out.println(line);
    t = Integer.parseInt(line);
    for(int i=0;i<t;++i)
    {
      line = br.readLine();

     if(!isEmpty(line)){
      n = Integer.parseInt(line.trim());
      --n;
     }

      if(n == 0)
      {
        System.out.println("poor conductor");
      }
      else
      {
        char direction='l',seat_posn='l';
        int row_no = 0, relative_seat_no = 0;
        row_no = (int) Math.ceil(n/5.0);
        relative_seat_no = n % 5;
        if(row_no % 2 == 0)
        {
          //even row, need to reverse the relative seat no
          relative_seat_no = 6 - relative_seat_no;
        }

        if(relative_seat_no < 3)
        {
          direction = 'L';
          if(relative_seat_no == 1) seat_posn = 'W';
          else seat_posn = 'A';
        }
        else
        {
          direction = 'R';
          if(relative_seat_no == 3) seat_posn = 'A';
          else if(relative_seat_no == 4) seat_posn = 'M';
          else seat_posn = 'W';
        }

        System.out.println(row_no + " " + seat_posn + " " + direction);
      }
    }
  }
}
like image 20
Narayan Yerrabachu Avatar answered Sep 23 '22 20:09

Narayan Yerrabachu