Znak zodiaku dla wczytanej daty

anika91
Użytkownik
Użytkownik
Posty: 172
Rejestracja: 11 paź 2009, o 19:54
Płeć: Kobieta
Lokalizacja: Gdańsk
Podziękował: 67 razy

Znak zodiaku dla wczytanej daty

Post autor: anika91 »

Witam, mam za zadanie:

Kod: Zaznacz cały

Napisz program w Javie, który po podaniu przez użytkownika dnia i miesiąca urodzin podaje znak zodiaku, spod którego jest użytkownik. Zakładamy, że zmiana znaku następuje 21 dnia każdego miesiąca.
No i wymyśliłam rozwiązanie tego takim sposobem:

Kod: Zaznacz cały

	switch (miesiac) {
		
		case 1:
				
				if (dzien<21) {
					
					System.out.println("Baran");
				}else
					System.out.println("Byk");
		
			
		
		case 2:
		
	}
itd...

Ale teraz mam pewne wątpliwości czy nie można tego zrobić jakoś prościej/krócej ? (w treści zadania mam podpowiedź, że najprawdopodobniej trzeba skorzystać z dzielenia MODULO.... ) Dla ułatwienia dodam że tablice i pętlę nie wchodzą w grę bo tego materiału jeszcze nie miałam.

Dziękuje serdecznie za pomoc.
raphel
Użytkownik
Użytkownik
Posty: 657
Rejestracja: 9 gru 2007, o 12:27
Płeć: Mężczyzna
Lokalizacja: Czewa/Wrocław
Podziękował: 84 razy
Pomógł: 138 razy

Znak zodiaku dla wczytanej daty

Post autor: raphel »

anika91 pisze: Dla ułatwienia dodam że tablice i pętlę nie wchodzą w grę bo tego materiału jeszcze nie miałam.
a szkoda bo wtedy możnaby to ładnie zrobić..
i wtedy byłoby bardziej potrzebne dzielenie modulo, dzięki któremu można by się odwoływać do danego elementu tablicy.. np:

Kod: Zaznacz cały

String[] tablicaMiesiecy = {"","styczeń","luty","marzec","kwiecień"...}//itd
String[] tablicaZnaków = {"pierwszy","drugi","trzeci",...); //itd
int miesiac = Integer.parseInt(JOptionPane.showInputDialog(null,"podaj numer miesiąca"));

for(int i=1; i<=12; i++)
{
  if(miesiac % 12 == i)) 
   {
       System.out.println(""+tablicaMiesiecy[i]);
          if(dzien < 21)
              System.out.println(""+tablicaZnakow[i]);
          else
              System.out.println(""+tablicaZnakow[i+1]);
    }
}
i tak by wyglądał cała część programu odpowiedzialna za te znaki
(nie kompilowałem kodu, ale wydaje mi się że nie ma tam błędów :) )

napewno podobna ilość kodu będzie gdybyś zamiast switch'a skorzystała z if'ów, ale to na to samo wychodzi..
anika91
Użytkownik
Użytkownik
Posty: 172
Rejestracja: 11 paź 2009, o 19:54
Płeć: Kobieta
Lokalizacja: Gdańsk
Podziękował: 67 razy

Znak zodiaku dla wczytanej daty

Post autor: anika91 »

No właśnie, ale materiał który do tej pory miałam to jedynie IF-y + ostatnio Switch-e . Ale przy zadaniu mam wskazówkę, że : 'być może coś z modulo?'
Więc już sama nie wiem jak to zrobić , gdzie wcisnąć to modulo przy tych switchach czy if-ach żeby to skrócić/lepiej wyglądało... sama nie wiem :?
abc666

Znak zodiaku dla wczytanej daty

Post autor: abc666 »

Zrób warunek na dzień przed pętlą

Kod: Zaznacz cały

if(dzien>=21) {
miesiac++;
}
if(miesiac==13) {
miesiac=1;
}
switch (miesiac) {
case 1: System.out.println("Baran");
case 2: System.out.println("Byk");
...
Nie znam javy wiec nie wiem czy składniowo wszystko ok, ale wiadomo o co chodzi.
anika91
Użytkownik
Użytkownik
Posty: 172
Rejestracja: 11 paź 2009, o 19:54
Płeć: Kobieta
Lokalizacja: Gdańsk
Podziękował: 67 razy

Znak zodiaku dla wczytanej daty

Post autor: anika91 »

abc666 pisze:Zrób warunek na dzień przed pętlą

Kod: Zaznacz cały

if(dzien>=21) {
miesiac++;
}
if(miesiac==13) {
miesiac=1;
}

...
Nie rozumiem za bardzo tego zabiegu... I czemu If(miesiac==13) {miesiac=1;}?
raphel
Użytkownik
Użytkownik
Posty: 657
Rejestracja: 9 gru 2007, o 12:27
Płeć: Mężczyzna
Lokalizacja: Czewa/Wrocław
Podziękował: 84 razy
Pomógł: 138 razy

Znak zodiaku dla wczytanej daty

Post autor: raphel »

bo nie ma 13 miesiąca, czyli jak ktoś wpisuje 13, to przeskakuje na pierwszy
abc666

Znak zodiaku dla wczytanej daty

Post autor: abc666 »

Nie.
Przecież u ciebie w każdym case byłby sprawdzany ten sam warunek, wiec po co go pisać 12 razy skoro można raz. Jeśli przekroczyliśmy 21 dzień do zwiększamy numer miesiąca, dodatkowo jeśli jest po 21 grudniu to dostajemy 12+1=13, więc musimy zmienić na styczeń.
anika91
Użytkownik
Użytkownik
Posty: 172
Rejestracja: 11 paź 2009, o 19:54
Płeć: Kobieta
Lokalizacja: Gdańsk
Podziękował: 67 razy

Znak zodiaku dla wczytanej daty

Post autor: anika91 »

Ok, zaczynam rozumieć , spróbuje to napisać za chwilkę i zobaczyć jak działa.

Jakkolwiek dalej czekam na pomysł jak w tym zadaniu wykorzystać operacje dzielenia Modulo...
ODPOWIEDZ