2012-02-26 14 views
5

Ben Benim kod NumberFormatException İştealınıyor bir 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); 
     } 
    } 
    } 
} 

veren bir interviewstreet.com meydan okuma için bazı kod yazıyordu onlar gibi görünüyor

3 
1 
2 
3 

Output: 
poor conductor 
1 W L 
1 A L 

kullanan test niteliği taşıyor istisna neden olan her satırın sonunda boşluk ya da bir şey.

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

Bu, yarım saat kadar sürdü ve bunu nasıl düzeltebileceğimi bilmiyorum. olayın eğlenceli öyle değil öldürür. Birisi bana yanlış yaptığımı söyleyebilir mi?

+0

eğer onun sonunda bir boşluk kırpmak zorunda sadece Döşeme ... döşemesini() kullanarak ... –

+0

yerine de karşı bazı beceriyor başım yaptığı Tarayıcı sınıfını kullanarak çalıştı duvar. Bir saat bu kadar gerçekten değil – nikhil

+2

Yarım :) – mbatchkarov

cevap

14

Integer.parseInt() dışarı buldum olarak, beklenen biçimi uymaz dizeleri işleyemez.

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

Bu lider ve sonlarındaki boşluk kurtulur: Bunu ayrıştırmak önce dizeyi trim() olabilir.

+0

Bu, teşekkürler çalıştı. İzleyen alanı otomatik olarak görmezden gelmemesi gereken parseInt'in belirli bir dizeden tamsayı kısmını çıkardığı izlenimindeydim. – nikhil

+3

@nikhil: Bu yanlış bir gösterim, ve (http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt (java.lang [ 'parseInt' için dokümanlar])) .String açıkça ifade: * dizesinde karakterlerin hepsi yöntem spesifikasyonu en iyi tahmin daha otoriter hep ilk basamak ... * hariç ondalık basamak olmalıdır. Google, ilk veya ikinci kaynağınız olmalıdır. –

+1

@nikhil Üzgünüz. ASCII eksi karakterimin ilk karakteri hariç, tüm karakterlerin ondalık basamak olması beklenir. – GaryF

1

Sen dize

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