2015-05-09 50 views
0

我現在已經有幾個線程了。這其中尤其是不斷即將在我的搜索:生日計算器格式異常錯誤

https://stackoverflow.com/questions/14219732/how-would-i-subtract-two-dates-mm-dd-yyyy

然而,它只是似乎沒有做我想做什麼,或者它可能只是我很不理解在線程的概念。基本上我只想接受用戶輸入(例如,1980年12月17日),並從當前日期中減去它以獲得人員的實際年齡。我從前面的線程和其他線程讀到的東西似乎很複雜,只是爲了做這個簡單的計算。截至目前程序編譯,但之後我輸入的日期我得到這些錯誤:

Exception in thread "main" java.lang.NumberFormatException: For input string: "12 13 1981" 
at java.lang.NumberFormatException.forInputString(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at bdayCalc.Class2.setAge(Class2.java:17) 
at bdayCalc.Class1.main(Class1.java:20) 

以下是我在我的計劃至今:

package bdayCalc; 

import java.util.Date; 
import java.util.Scanner; 

public class Class1 { 
    public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    Class2 object2 = new Class2(); 

    System.out.print("What is your name? : "); 
    String name = input.nextLine(); 
    object2.setName(name); 
    object2.message(); 
    System.out.println(); 
    System.out.print("Please enter your birthday : "); 
    String userInput = input.nextLine(); 
    object2.setAge(userInput); 
    object2.finalMessage(); 
    } 
} 

package bdayCalc; 
import java.util.Calendar; 

public class Class2 { 
int year = Calendar.DATE; 
private String fullName; 

public void setName(String name) { 
    fullName = name; 
} 

private int bDay; 
public void setAge(String userInput) { 
    bDay = Integer.parseInt(userInput) - year; 
} 

/*private int year() { 
    return 0; 
}*/ 

public String getName() { 
    return fullName; 
} 

public int getAge() { 
    return bDay; 
} 

public void message() { 
    System.out.printf("Hello %s ", getName()); 
} 

public void finalMessage() { 
    System.out.printf(getName() + " You were born in " + bDay); 
} 

} 
+0

The'String'' 「12 13 1981」 '由於空白而不是'int'的表示。因此,它會拋出一個'NumberFormatException'。 – Jyr

+0

我正在考慮這樣做,但我只是堅持從當前時間減去輸入的想法。必須有一個簡單的方法來做到這一點。 –

+0

我編了一個例子。請檢查它是否適用於您。 –

回答

1

我已迅速編制一個簡單的例子這將爲你工作。它使用Java 8 Date API:

public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Please enter your birthday (YYYY-MM-DD) format: "); 
     String userInput = input.nextLine(); 
     String[] splitValues = userInput.split("-"); 
     if(splitValues.length == 3) { 
      int year = Integer.parseInt(splitValues[0]); 
      int mon = Integer.parseInt(splitValues[1]); 
      int day = Integer.parseInt(splitValues[2]); 

      LocalDate birthdate = LocalDate.of(year, mon, day); 
      LocalDate now =LocalDate.now(); 
      long age = Period.between(birthdate, now).getYears(); 
      System.out.println(age); 
     } 
    } 

這裏是輸出:

Please enter your birthday : 1981-10-22 33

+0

哇,你讓編程看起來很簡單。我會用你的答案akhil。不過,爲了確保它能夠下載,我必須多次閱讀它。主要是我想完全理解最後6行。我想我明白了。謝啦。 –

+0

很高興幫助你Narain :)一個建議使用生日格式爲'YYYY-DD-MM',而不是'YYYY DD MM'。我現在將格式化代碼。 –

0

你可以試試這個:

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.print("Please enter your birthday as mm/dd/yyyy: "); 
    while (true) { 
     String userInput = input.nextLine(); 
     try { 
      Date date = new SimpleDateFormat("mm/dd/yyyy").parse(userInput); 
      long ageInDays = TimeUnit.DAYS.convert(new Date().getTime() - date.getTime(), TimeUnit.MILLISECONDS); 
      int age = (int) ageInDays/365; 
      System.out.println(age); 
      break; 
     } catch (Exception ex) { 
      System.out.println("Please enter a valide date"); 
     } 
    } 
}