嗨当我运行以下代码时,我得到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();}
}
}}
答案 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
请参考精彩逻辑
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不兼容,因此错误。