IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:19.11.2012 19:06

Zdravím, peru se tu s Javou už asi hodinu na jednoduché aplikaci. V intervalu 2 datumů chci vypsat všechny pondělky. Vše se zdá být v pořádku až na poslední podmínku v cyklu, kde metoda before vrací vždy false, což nechápu. Když while nahradím for cyklem a vypíšu pár pondělků od 1. data, tak to funguje dobře.

Hodnoty zkouším 1.1.2012 a 1.2.2012, mělo by to vypsat: 2.1.2012, 9.1.2012, 16.1.2012, 23.1.2012, 30.1.2012

Díky za pomoc :)

Scanner sc = new Scanner(System.in, "Windows-1250");
System.out.println("Pro zadaný interval datumů vypíše všechny pondělky");
SimpleDateFormat format = new SimpleDateFormat("dd.mm.yyyy");

System.out.println("Zadejte 1. datum: ");
Calendar calendar1 = Calendar.getInstance();
try {
        calendar1.setTime(format.parse(sc.nextLine()));
} catch (ParseException ex) {
        System.out.println("Špatně zadané datum!");
}

System.out.println("Zadejte 2. datum: ");
Calendar calendar2 = Calendar.getInstance();
try {
        calendar2.setTime(format.parse(sc.nextLine()));
} catch (ParseException ex) {
        System.out.println("Špatně zadané datum!");
}

System.out.print("Pondělky: ");

// posunutí prvního datumu na pondělí
while (calendar1.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY)
{
        calendar1.add(Calendar.DAY_OF_MONTH, 1);
}

while (calendar1.before(calendar2))
{
        Date datum = calendar1.getTime();
        System.out.printf("%s, ", format.format(datum));
        calendar1.add(Calendar.DAY_OF_MONTH, 7);
}
Odpovědět
19.11.2012 19:06
New kid back on the block with a R.I.P
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:19.11.2012 19:10

Jsem blbej nebo nechápu o kterou podmínku jde o_O

Nahoru Odpovědět
19.11.2012 19:10
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Petr Nymsa
David Hartinger:19.11.2012 20:13

Myslím, že jsem to popsal srozumitelně, jde o ten poslední cyklus, podmínka:

calendar1.before(calendar2)

vrací vždy false. Pokud tam dám natvrdo for cyklus, tak mi to vypíše výsledky co chci, jen to nemůžu oříznout do toho 2. data. Opravdu banalita 8|

Nahoru Odpovědět
19.11.2012 20:13
New kid back on the block with a R.I.P
Avatar
Fugiczek
Tvůrce
Avatar
Odpovídá na David Hartinger
Fugiczek:19.11.2012 20:37

Jedinej problem je ten tvůj formát data. Správně má být takhle:

SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");

Takže jen písmenka M dát velký. Velký M má význam měsíce, zatímco malé m je minuta v hodině. Takže se ti špatně nastavila data, byla úplně stejná ale lišila se jen v hodinách. Přesnější popis písmenek nalezneš zde: http://docs.oracle.com/…eFormat.html

 
Nahoru Odpovědět
19.11.2012 20:37
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Fugiczek
David Hartinger:19.11.2012 21:16

Aha, to mě nenapadlo, díky! Už jsem z toho šílel :D

Nahoru Odpovědět
19.11.2012 21:16
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:19.11.2012 21:25

Myslím si, že kdyby sis ty datumy nechal vypsat, přišel bys na to sám.

Nahoru Odpovědět
19.11.2012 21:25
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:19.11.2012 21:27

Já si je nechával vypsat, ale tím blbým formatterem :D A v integeru bylo to 1. větší a mě nedošlo proč.

Nahoru Odpovědět
19.11.2012 21:27
New kid back on the block with a R.I.P
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.