2012-02-26 9 views
5

estaba escribiendo algo de código para un reto interviewstreet.com Mi código da una NumberFormatExceptionConseguir un 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); 
     } 
    } 
    } 
} 

Aquí es el caso de prueba que utilizan

3 
1 
2 
3 

Output: 
poor conductor 
1 W L 
1 A L 

Parece que hay una espacio al final o algo al final de cada línea que causa la excepción.

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

Esto ha tomado hasta media hora y no sé cómo solucionarlo. Elimina la diversión del evento, ¿verdad? ¿Puede alguien decirme qué estoy haciendo mal?

+0

si es un espacio al final, simplemente recortarla ... usando trim() ... –

+0

intentado usar la clase escáner lugar también hizo algunos golpeando mi cabeza contra una pared. – nikhil

+2

Media hora no es mucho realmente :) – mbatchkarov

Respuesta

14

Integer.parseInt() no puede manejar cadenas que no se ajustan a su formato esperado, como ha descubierto. Se podría trim() la cadena antes de analizarlo:

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

Esto se deshace de espacio inicial y final.

+0

Esto funcionó, gracias. Tenía la impresión de que parseInt extrajo la parte entera de una cadena determinada, ¿no debería ignorar automáticamente el espacio final? – nikhil

+3

@nikhil: Esa es una impresión incorrecta, y los [documentos para 'parseInt'] (http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt (java.lang) .String)) indique claramente esto: * Los caracteres en la cadena deben ser todos dígitos decimales, excepto el primer dígito ... * La especificación del método siempre es más autorizada que su mejor estimación. Google debería ser su primer o segundo recurso. –

+1

@nikhil Lamentablemente no. Espera que todos los caracteres sean dígitos decimales, a excepción del primer carácter, que es un carácter menos ASCII. – GaryF

1

Tienes que cortar la cadena

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); 
     } 
    } 
    } 
} 
Cuestiones relacionadas