2012-10-18 34 views
0

我试图用Java编写一个程序,该程序将接受用户输入并转换为摄氏或华氏。因此用户输入一些数字,一个空格,然后是C或F.祢程序编译罚款,但是当我尝试测试它,我得到以下信息:MSDOS窗口中的Java程序错误:线程“main”中的异常java.lang.NumberFormatException

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

回答

1

Integer.parseInt将尝试解析整个字符串你通过了。如果你通过例如"75F"那么该方法将失败,除了你看到的例外。

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

您可以使用Scanner.nextInt从输入抢号,但如果你输入的样子75F,然后Scanner.nextInt将失败并InputMismatchException

0
String CF = input.nextLine(); // inputs string 
int temp = Integer.parseInt(CF); // 

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

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

但即使在此之前,你必须拆分C或F由于原始字符串客场做整数解析。

相关问题