用扫描仪功能计算年龄不起作用

时间:2013-09-10 16:24:25

标签: java

首先,我想告诉大家我刚开始在大学学习Java。所以请原谅我作为新手所犯的任何错误。

基本上我想用这段代码实现的是使用扫描仪功能计算某人的年龄。有人输入他们的出生日期(格式为YYYY-MM-DD),我的代码计算他们的年龄。

代码无效,因为我认为第3行:       字符串dob = input.nextInt(); 写入错误,无法通过其下方的代码行识别。

如果我将该行更改为 String dob =“1988-11-29”; 它可以工作,但是我的扫描仪功能没用。

有人可以帮我吗? 提前谢谢!

  Scanner input  = new Scanner(System.in);
  System.out.println("Enter your DOB pls");
  String dob = input.nextInt();

  int yearDOB = Integer.parseInt(dob.substring(0, 4)); 
  int monthDOB = Integer.parseInt(dob.substring(5, 7)); 
  int dayDOB = Integer.parseInt(dob.substring(8, 10)); 

  SimpleDateFormat 
  dateFormat = new SimpleDateFormat("yyyy"); 
  Date date = new Date(); 
  int thisYear = Integer.parseInt(dateFormat.format(date)); 

  dateFormat = new SimpleDateFormat("MM");
  date = new java.util.Date();
  int thisMonth = Integer.parseInt(dateFormat.format(date));

  dateFormat = new SimpleDateFormat("dd");
  date = new java.util.Date();
  int thisDay = Integer.parseInt(dateFormat.format(date));

  int age = thisYear-yearDOB;
  if(thisMonth < monthDOB){ age = age-1;
  } if(thisMonth == monthDOB && thisDay < dayDOB)
  { age = age-1;
  } 

  System.out.println("The age of user is : " + age);

2 个答案:

答案 0 :(得分:0)

当你写

String dob = input.nextInt()

您试图将int放入Stringdob。如果您尝试阅读整个nextInt()行,1988-11-29是错误的方法。

您可能想尝试Scanner.nextLine或其他一些返回String

的方法

答案 1 :(得分:0)

Scanner s=new Scanner(System.in);
String dob=s.next("[12][0-9]{3}-[0-9]{2}-[0-3][0-9]");
int yearDOB = Integer.parseInt(dob.substring(0, 4)); 
int monthDOB = Integer.parseInt(dob.substring(5, 7)); 
int dayDOB = Integer.parseInt(dob.substring(8, 10));
Calendar c=Calendar.getInstance();
int thisYear = c.get(Calendar.YEAR);
int thisMonth = c.get(Calendar.MONTH)+1;
int thisDay = c.get(Calendar.DAY_OF_MONTH);
// the rest is up to you