2012-02-26 3 views
5

я писал код для interviewstreet.com вызов Мой код дает NumberFormatExceptionПолучение 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); 
     } 
    } 
    } 
} 

Вот тест, что они используют

3 
1 
2 
3 

Output: 
poor conductor 
1 W L 
1 A L 

Там, кажется, конечное пространство или что-то в конце каждой строки, которая вызывает исключение.

$ 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) 

Это заняло полчаса, и я не знаю, как это исправить. Убивает удовольствие от события, не так ли. Может кто-то сказать мне, что я делаю неправильно.

+0

если его замыкающий пробел, просто обрезать ее ... используя облицовку() ... –

+0

Пробовал с помощью класса Scanner вместо также сделал некоторые стучать головой о стены. – nikhil

+2

Полчаса не так уж и много :) – mbatchkarov

ответ

14

Integer.parseInt() не может обрабатывать строки, которые не соответствуют его ожидаемому формату, как вы выяснили. Вы можете trim() строку, прежде чем разобрать его:

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

Это избавляется начальные и конечные пробелы.

+0

Это сработало, спасибо. У меня создалось впечатление, что parseInt извлекает целую часть из заданной строки, не следует ли автоматически игнорировать конечное пространство? – nikhil

+3

@nikhil: Это неправильное впечатление, а [docs для 'parseInt'] (http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt (java.lang .String)) ясно укажите это: * Символы в строке должны быть десятичными цифрами, за исключением первой цифры ... * Спецификация метода всегда более авторитетна, чем ваша лучшая догадка. Google должен быть вашим первым или вторым ресурсом. –

+1

@nikhil К сожалению нет. Он ожидает, что все символы будут десятичными цифрами, за исключением первого символа, который мой ASCII минус-символ. – GaryF

1

Вы должны обрезать строковое

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); 
     } 
    } 
    } 
} 
Смежные вопросы