5

Interviewstreet.com チャレンジ用のコードを書いていたところ、コードで 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)

これには 30 分かかりましたが、これを修正する方法がわかりません。イベントの面白さを損ないますね。誰かが私が間違っていることを教えてもらえますか。

4

2 に答える 2

14

Integer.parseInt()ご存知のように、期待される形式に適合しない文字列を処理することはできません。trim()文字列を解析する前に、次のようにすることができます。

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

これにより、先頭と末尾の空白が削除されます。

于 2012-02-26T17:00:23.760 に答える
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);
      }
    }
  }
}
于 2013-05-13T19:53:36.547 に答える