0

我正在尝试用 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>

我猜 Java 不喜欢我尝试使用 Parse 在字符串中搜索整数。关于如何完成它的任何建议?

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

public class TempConv
{
public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);
    String reply = "y";
  while( reply.equalsIgnoreCase("y") )
    {
        System.out.println("Enter temp (ex. 70 F or 23 C): ");
        String CF = input.nextLine(); // inputs string
        int temp = Integer.parseInt(CF); // to get integers from string
        for (int i = 0; i < CF.length(); ++i)
        {
            char aChar = CF.charAt(i);
            if (aChar == 'F') // looking in string for F
            // go to f2c()
            {
                f2c(temp);
            }
            else if (aChar == 'C') // looking for C
            // go to c2f()
            {
                c2f(temp);
            }
        }
    System.out.println("Would you like to covert another temp? <y/n> ");
    reply = input.next();
    }
}
static void f2c(int j)
{
    int c = (j - 32)*(5/9);
    System.out.println(j + "F = " + c + "C");
}

static void c2f(int k)
{
    int f = (k*(5/9))+32;
    System.out.println(k + "C = " + f + "F");
}
}
4

2 回答 2

1

Integer.parseInt将尝试解析您传递的整个字符串。如果您通过例如"75F",那么该方法将失败,并出现您看到的异常。

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

您可以使用Scanner.nextInt从输入中获取数字,但如果您的输入看起来像75F,那么Scanner.nextInt将失败并显示InputMismatchException.

于 2012-10-18T04:30:02.430 回答
0
String CF = input.nextLine(); // inputs string
int temp = Integer.parseInt(CF); //

是有问题的。你怎么知道用户总是输入整数值?这里它试图解析例如 10C 或 10 F 这不是一个有效的整数。当你是nextLine方法时,它返回任何字符串,它不必是一个数字。在 try catch 中处理它,

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

但在此之前,您必须将 C 或 F 与原始字符串分开以进行整数解析。

于 2012-10-18T04:40:26.390 回答