问题
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.
回答1:
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.
回答2:
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);
}
}
}
}
来源:https://stackoverflow.com/questions/9455070/getting-a-numberformatexception