我是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)
任何人都可以帮我理解我做错了吗?
答案 0 :(得分:3)
System.out.print("Enter Name : ");
String S1 = BR.readLine();
Name = Integer.parseInt(S1);
parseInt(...)
仅在传入的字符串可以解析为整数时才有效,否则将抛出NumberFormatException
。
在你的情况下,我认为它应该是:
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”是数字字符串,可以转换为Integer
或Float
,而前者无法转换。
我已经包含了一个使用日历处理日期的示例,其中包括快速参考和示例。
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 Calendar和Example
答案 3 :(得分:0)
对于结论,问题是您要转换数字中的字符,因为这是不可能的,您的程序会抛出一个名为数字格式异常的异常。
解决方案就是删除Integer.parseInt(S1)
&的代码行。 Integer.parseInt(S3)
因为这两者都试图转换姓名&解决数字因此引发异常。