Софтуерно Инженерство
Loading...
+ Нов въпрос
fedele avatar fedele 7 Точки

задача 1000 Days after Birth

Здравейте,

накой може ли да ми каже къде греша.

package SimpleCalculations;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Scanner;

public class DaysAfterBirth {
    public static void main(String[] args) {
        DateTimeFormatter f=DateTimeFormatter.ofPattern("dd-mm-yyyy");
        Scanner scan = new Scanner(System.in);
        LocalDate d = LocalDate.parse(scan.nextLine(),f);
        LocalDate d1 = d.plusDays(1000);
        System.out.println(d1.format(f));
    }
}

условието на задачата е:

Напишете програма, която въвежда рождена дата във формат “dd-MM-yyyy” и пресмята датата, на която се навършват 1000 дни от тази рождена дата и я отпечатва в същия формат.

Примерен вход и изход:

вход

Изход

25-02-1995

20-11-1997

07-11-2003

02-08-2006

30-12-2002

24-09-2005

01-01-2012

26-09-2014

14-06-1980

10-03-1983

0
Java Fundamentals
TeodorStefanovPld avatar TeodorStefanovPld 950 Точки

сложи 999 и ще мине,поради начина които работи datetime сега превърташ дата с 1 ден и ти дава грешка 

0
fedele avatar fedele 7 Точки

Не минава. Проблемът е по-сериозен. Излиза следното съобщение:


12-03-2009
Exception in thread "main" java.time.format.DateTimeParseException: Text '12-03-2009' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {DayOfMonth=12, Year=2009, MinuteOfHour=3},ISO of type java.time.format.Parsed
    at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855)
    at java.time.LocalDate.parse(LocalDate.java:400)
    at SimpleCalculations.DaysAfterBirth.main(DaysAfterBirth.java:12)
Caused by: java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {DayOfMonth=12, Year=2009, MinuteOfHour=3},ISO of type java.time.format.Parsed
    at java.time.LocalDate.from(LocalDate.java:368)
    at java.time.format.Parsed.query(Parsed.java:226)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    ... 2 more

Process finished with exit code 1

 

0
TeodorStefanovPld avatar TeodorStefanovPld 950 Точки

значи колегата е дал допълнителните неща аз нарочно не го направих. 

https://www.tutorialspoint.com/java/java_date_time.htm - тук е обяснено какво е клас време в java и за форматирането му. Гледам че се появиха няколко подобни теми за java и php. Затова на кратко времето си има специален вграден клас в всеки език, и когато се работи с него този клас трябва да се извика,и подаде формата които се използва. Примерно дали ще е нашето +2gmt време. Или гринуч времевата зона. + допълни неща като дали да изписва 4ас-мин-сек или ден-час-мин-сек... Възможностите са безкрайни.Явно е било изпуснато на басик лекций или споменато между другото.

 а иначе +999 вместо 1000 си работи,но с малкото допъление на колегата,зад което стоят тези неща описани по-горе.

0
KeepCoding avatar KeepCoding 282 Точки

Трябва форматът да е "dd-MM-yyyy"

Също така трябва последният ред да е 

System.out.println(f.format(d1));

 

0
fedele avatar fedele 7 Точки

Благодаря за корекциите! Вече работи:

public class DaysAfterBirth {
    public static void main(String[] args) {
        DateTimeFormatter f=DateTimeFormatter.ofPattern("dd-MM-yyyy");
        Scanner scan = new Scanner(System.in);
        LocalDate d = LocalDate.parse(scan.nextLine(),f);
        LocalDate d1 = d.plusDays(999);
        System.out.println(f.format(d1));
    }
}
0
Betov91 avatar Betov91 0 Точки

Аз съм решил задачата по същия начин, но judge не я приема. Изписва ми, че съм нарушил лимит времето. Тоест много време отнема за да изпълни програмата. Но не се сещам за друг начин? При теб judge приема ли решението? 

0
fedele avatar fedele 7 Точки

Judge прие решенито 100/100

0
German40 avatar German40 15 Точки

Превърташ date time - сложи 999

0