MSDOS窗口中的Java程序错误:线程中出现异常;“主要”;java.lang.NumberFormatException

MSDOS窗口中的Java程序错误:线程中出现异常;“主要”;java.lang.NumberFormatException,java,Java,我正试图用Java编写一个程序,从用户那里获取输入并转换成摄氏度或华氏度。因此,用户将输入一些数字,一个空格,然后是C或F。程序编译得很好,但当我尝试测试它时,我得到以下消息: Exception in thread "main" java.lang.NumberFormatException: For input string: (whatever number, space, F/C I put in to test it0 at java.lang.Integer.parseIn

我正试图用Java编写一个程序,从用户那里获取输入并转换成摄氏度或华氏度。因此,用户将输入一些数字,一个空格,然后是C或F。程序编译得很好,但当我尝试测试它时,我得到以下消息:

Exception in thread "main" java.lang.NumberFormatException: For input string: (whatever number, space, F/C I put in to test it0

    at java.lang.Integer.parseInt<Integer.java:492>
    at java.lang.Integer.parseInt<Integer.java:527>
    at Temp.Conv.main<TempConv.java:14>
线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:(无论我输入什么数字、空格、F/C来测试it0
位于java.lang.Integer.parseInt
位于java.lang.Integer.parseInt
温度转换主管道
我猜Java不喜欢我尝试使用Parse搜索字符串中的整数。 对于如何实现这一目标,还有什么建议吗

这是代码:(只是让你知道,我知道括号和空格是关闭的,但这个网站不允许我修复它)

公共类TempConv
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
字符串reply=“y”;
while(回复:等信号情况(“y”))
{
系统输出打印项次(“输入温度(例如70华氏度或23摄氏度):”;
字符串CF=input.nextLine();//输入字符串
int temp=Integer.parseInt(CF);//从字符串中获取整数
对于(int i=0;i
Integer。parseInt
将尝试解析您传递的整个字符串。如果您传递了例如
“75F”
,则该方法将失败,并出现您看到的异常

您需要自己进行输入验证。如果您希望用户提供某种格式,则需要检查输入是否与格式匹配,然后提取与数字匹配的输入部分,并将其传递给
Integer.parseInt
:检查
C
F
的最后一个字符,并传递所需的子字符串将该字符提取到
Integer.parseInt
。将调用包装在
try/catch
块中,以便可以继续询问/循环输入的格式是否仍然错误

您可以使用
Scanner.nextInt
从输入中获取数字,但如果您的输入看起来像
75F
,则
Scanner.nextInt
将因
输入不匹配异常而失败

String CF = input.nextLine(); // inputs string
int temp = Integer.parseInt(CF); //
是有问题的。你怎么知道用户总是输入整数值?这里它试图解析不是有效整数的例如10C或10f。当你使用
nextLine
方法时,它会返回任何字符串,并且不必是数字。在try-catch中处理它

try {
temp  = Integer.parseInt(CF);
} catch () {
 //handle
}
但在执行此操作之前,必须将C或F从原始字符串中分离出来,以进行整数解析

try {
temp  = Integer.parseInt(CF);
} catch () {
 //handle
}