这段代码有什么问题?

时间:2010-09-28 09:25:36

标签: java

嗨当我运行以下代码时,我得到NumberFormatException任何人都可以帮我调试代码。

import java.io.*;
public class Case1 {
   public static void main(String args[])
   {  
       char ch='y';int i=0;
       BufferedReader bf=new  BufferedReader(new InputStreamReader(System.in));
       System.out.println("ch before while:::"+ch);
       while(ch=='y'||ch=='Y'){
           try{

       System.out.println("Enter the option");
         i=Integer.parseInt(bf.readLine());
       System.out.println("after"+i);

  switch {
       case 1 ystem.out.println("1");   break;
       case 2 ystem.out.println("1"); break;
       }
       System.out.println("do u want to continue(Y/y");
       ch=(char)bf.read();
       System.out.println("ch after execution:::"+ch);


   }
           catch(NumberFormatException e){e.printStackTrace();}
           catch(IOException e){e.printStackTrace();}
       }

}}

5 个答案:

答案 0 :(得分:2)

我在日常工作中遇到的这个问题。 bf.readLine()为您提供空字符串("")或字符值[A-Z]。所以请进行前置条件检查,例如

    // To allow only Integer to be parsed.
      String  rawText = br.readLine().trim();
      if (    isNumeric (rawText)              // returns false for non numeric
           && rawText.matches("-?\\d+?")           // Only Integers.
         )  

更新:

// isNumeric implementation Due credit to CraigTP

请参考精彩逻辑

  

How to check if a String is numeric in Java

public static boolean isNumeric(String str) 
{ 
  NumberFormat formatter = NumberFormat.getInstance(); 
  ParsePosition pos = new ParsePosition(0); 
  formatter.parse(str, pos); 
  return str.length() == pos.getIndex(); 
} 

答案 1 :(得分:1)

System.out.println("Enter the option");
         i=Integer.parseInt(bf.readLine());   

问题在这里。

您正在读取一些非数字输入并尝试将其解析为int。这是特例。

答案 2 :(得分:0)

可能因为readline字符串就像'123 \ n'。

答案 3 :(得分:0)

我用扫描仪替换了输入流。

public class Case1 {


   public static void main(String args[])
   {  
       char ch='y';int i=0;
      Scanner s=new Scanner(System.in);
       System.out.println("ch before while:::"+ch);
       while(ch=='y'||ch=='Y'){


       System.out.println("Enter the option");
       System.out.flush(); 
       i=s.nextInt();

       System.out.println("after"+i);

  switch(i) {
       case 1:System.out.println("1");   break;
       case 2:System.out.println("1"); break;
       }
       System.out.println("do u want to continue(Y/N)");
       ch=(char)s.next().charAt(0);
       System.out.println("ch after execution:::"+ch);


   }


}}

答案 4 :(得分:0)

我们只能将显式类型转换用于彼此兼容的数据类型。但是当您尝试在

上进行类型转换时
ch=(char)bf.read();

你实际上是在尝试将Integer转换为char(因为bf.read()的返回类型是int)。但是Integer和char不兼容,因此错误。