typ enum - kolorki

0

Witam,

Caly czas zaczynam zabawe z java dlatego prosze was o pomoc :)
Musze napisac napisac program - typ wyliczeniowy.

Typ enum zawiera barwy o wspolrzednych RGB.
Mam 2 pytania:

  1. Jak napisac metode (wykonywana na przedmiocie)
    'boolean porownanie(double r, double g, double b)'
    która zwraca true gdy argumenty sa dokładnie takie jak parametry koloru.

  2. oraz metode statyczna
    'public static Barwa nazwa(double r, double g, double b)'
    która zwraca przedmiot, który dokładnie odpowiada składowym r, g, b.
    Gdy taki przedmiot nie istnieje zwraca null. (Uzyc metody statycznej
    values() i konstrukcji 'for(Kolor a : values()){ ...}'.)

Wykomentowane to moja propozycja... jednak wiem ze odbiega to dalece
od tego co mam zrobic.. Prawdopodonie musze uzyc funkcji oridial

enum Barwa {
		BLACK(0, 0, 0), WHITE(255, 255, 255), GREY(128,128,128);
		
		double red,green,black;
		
		private Kolor(double r, double g, double b) {
			red = r;
			green = g;
			black = b;
		}
		
		public double red() {return red;}
		public double green() {return green;}
		public double black() {return black;}
		
		/*
		boolean porownaj(double r, double g, double b){
			if ((r == red()&& g == green() && b == black()) 
				return true;
		}
		*/
		
		/*
		public static Kolor nazwij(double r, double g, double b) {
			for(Kolor a : Kolor.values()){ 
				if ((r == red()&& g == green() && b == black()) 
					return a;
			}
		}
		*/
				
	}

Dzieki wam z gory za pomoc

0

Enum

  1. Zwróć uwagę na to że enumy są Comparable, zatem można zbudować naprawdę ciekawe porównania. Enum jest też zwykłym obiektem więc można użyć equals(), ale najfajniejsze jest to, że enumy są tylko raz inicjowane przy ładowaniu klasy zatem porównanie:
Wartosci b = Wartosci.B;
Wartosci c = Wartosci.B;
System.out.println(c == b);

gdzie Wartosci to enum zwroci true. Tyle o enumach.
Jeżeli chcesz jednak wykonywać porównanie enuma i obiektu to można zrobić to w taki sposób:

public boolean porownaj(Object pole){
   return this.pole.equals(pole);
}

Enum zawsze istnieje więc nie poleci NullPointer. Wystarczy dodać warunki && i po problemie.

  1. Propozycja jest dobra ponieważ metoda ordinal() nie powinna być używana w sumie poza strukturami takimi jak set czy list. Szczególnie, że metoda nie przyjmuje parametrów więc nie nadaje się do porównywania z obiektami.
0

Dodam tylko, że wprawdzie enumy są Comparable, ale metoda compareTo() jest dla nich typu final(nie można jej zmieniać).

Jeżeli napiszemy
enum E{
X,Y,Z
}
to X<Y<Z ("<" będzie od Javy 7, teraz trzeba używać metody compareTo() albo "==" dla równości)

1 użytkowników online, w tym zalogowanych: 0, gości: 1