尝试读取用户输入时出现NumberFormatException

时间:2014-12-09 06:03:39

标签: java

我是Java的新手,并编写了一个程序来显示名称,地址,电话号码和生日名称&电话号码为public,生日为private,其他信息为protected

这是我的核心课程:

public class newd {

    public int Name;
    public int Phone_no;
    protected String Address;
    protected int Age;
    private int Birth_day;

    void GetData() throws IOException
    {
        InputStreamReader IN = new InputStreamReader(System.in);
        BufferedReader BR = new BufferedReader(IN);

        System.out.print("Enter Name : ");
        String S1 = BR.readLine();
        Name = Integer.parseInt(S1);

        System.out.print("Enter Phone_no : ");
        String S2 = BR.readLine();
        Phone_no = Integer.parseInt(S2);

        System.out.print("Enter Address : ");
        String S3 = BR.readLine();
        Age = Integer.parseInt(S3);

        System.out.print("Enter Age : ");
        String S4 = BR.readLine();
        Age = Integer.parseInt(S4);

        System.out.print("Enter Birth_day : ");
        String S5 = BR.readLine();
        Birth_day = Integer.parseInt(S5);

    }

    void Display()
    {
        System.out.println("Name : " + Name);
        System.out.println("Phone No : " + Phone_no);
        System.out.println("Address : " + Address);
        System.out.println("Age : " + Age);
        System.out.println("Birth Day : " + Birth_day); 
    }

}

以下是我使用它的方式:

public class newdirectory {

    public static void main(String[] args) throws IOException {

        newd D = new newd();

        D.GetData();
        D.Display();

    }

}

编译程序时,会显示此对话框。

Enter Name : kamrul
Exception in thread "main" java.lang.NumberFormatException: For input string: "kamrul"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at newd.GetData(newd.java:21)
    at newdirectory.main(newdirectory.java:9)

任何人都可以帮我理解我做错了吗?

4 个答案:

答案 0 :(得分:3)

System.out.print("Enter Name : ");
String S1 = BR.readLine();
Name = Integer.parseInt(S1);


parseInt(...)仅在传入的字符串可以解析为整数时才有效,否则将抛出NumberFormatException

请参阅this link here


在你的情况下,我认为它应该是:

public String Name;

你只需要这样做:

System.out.print("Enter Name : ");
Name = BR.readLine();


地址相同:

System.out.print("Enter Address : ");
Address = BR.readLine();

答案 1 :(得分:0)

System.out.print("Enter Address : ");
String S3 = BR.readLine();
Age = Integer.parseInt(S3);

这是代码中的问题。您正试图将字符串数据转换为整数,因此异常。

还要将您的公共实例变量更改为protected / private。除非它们是常数,否则不应将变量公开为公开。

变量声明参考: https://docs.oracle.com/javase/tutorial/java/javaOO/variables.html

答案 2 :(得分:0)

您的代码存在的问题是您尝试将非数字字符串转换为数字,在这种情况下,您将收到NumberFormatException。为清楚起见,“avadakadavra”是非数字字符串,“1234”是数字字符串,可以转换为IntegerFloat,而前者无法转换。

我已经包含了一个使用日历处理日期的示例,其中包括快速参考和示例。

import java.util.*;
import java.io.*;

public class newd {

    public String Name;
    public int Phone_no;
    protected String Address;
    protected int Age;
    private Calendar Birth_day;

    void GetData() throws IOException
    {
        InputStreamReader IN = new InputStreamReader(System.in);
        BufferedReader BR = new BufferedReader(IN);

        System.out.print("Enter Name : ");
        Name = BR.readLine();

        System.out.print("Enter Phone_no : ");
        Phone_no = Integer.parseInt(BR.readLine());

        System.out.print("Enter Address : ");
        Address = BR.readLine();

        System.out.print("Enter Age : ");
        String S4 = BR.readLine();
        Age = Integer.parseInt(S4);

        System.out.print("Enter Birth_day MM/DD/YYYY: ");
        String[] date = ((String)BR.readLine()).split("/");
        Birth_day = new GregorianCalendar(Integer.parseInt(date[2]),Integer.parseInt(date[1]),Integer.parseInt(date[0]));

    }

    void Display()
    {
         System.out.println("Name : " + Name);
         System.out.println("Phone No : " + Phone_no);
         System.out.println("Address : " + Address);
         System.out.println("Age : " + Age);
         System.out.println("Birth Day : " + Birth_day.get(Calendar.MONTH) + "/" + Birth_day.get(Calendar.DAY_OF_MONTH) + "/" + Birth_day.get(Calendar.YEAR)); 
     }
}

之前的Java日期是使用JAVA.UTIL.DATE中提供的Date类进行管理的,但随着Calender的引入,在同一个软件包中提供,日期处理得到了改进。 for quick tutorial on CalendarExample

答案 3 :(得分:0)

对于结论,问题是您要转换数字中的字符,因为这是不可能的,您的程序会抛出一个名为数字格式异常的异常。

解决方案就是删除Integer.parseInt(S1)&的代码行。 Integer.parseInt(S3)因为这两者都试图转换姓名&解决数字因此引发异常。