Może mnie ktoś sprawdzić :)

0

Czesc wszystkim, ponieważ dopiero co się uczę tego potężnego jezyka bardzo bym prosił o sprawdzenie mi ćwiczenia ktore miałem zrobić. (w razie wykrycia błędu - jest na pewno, bardzo proszę nie tylko o poprawę ale i wytłumaczenie) Oto treść zadania

a) stwórz interfejs U z 3 metodami
b) stwórz klasę A z metodą produkującą referencję do U poprzez wewnętrzną klasę anonimową
c) stwórz klasę B z tablicą U
d) B ma metodę akceptującą i przechowującą referencję do U
e) metodę ustawiająca referencję do A (podaną jako argument) na null
f) metodę przechodzącą przez tablicę i wywołującą metody U
g) main - stworzyć grupę obiektów A i jeden obiekt B, wypełnij B referencjami typu U wyprodukowanymi przez obiekty A, B wywołuje obiekty A poprzez wywołanie zwrotne. Oto mój kod

//a
interface U{
	public void one();
	public void two();
	public void three();
}

b)
class Aclass implements U{
	
	public void one() { System.out.println("1"); }
	public void two(){ System.out.println("2"); }
	public void three(){ System.out.println("3"); }
	
	U makeU(){
		return new U() {
			public void one() { System.out.println("1"); }
			public void two(){ System.out.println("2"); }
			public void three(){ System.out.println("3"); }
		};
	}
}


public class Bclass{
	private U[] tab;      //c
	private int next = 0;
	
	public Bclass(int size){
		tab = new U[size];
	}
	
	public void methodOne(U size){   //d
		if(next < tab.length){
			tab[next++] = size;
		}
	}
		
	public void methodTwo(){         //f
		for(int i = 0; i < tab.length; i++){
			tab[i].one();
			tab[i].two();
			tab[i].three();
		}
	}
	
	public void methodThree(Aclass a){        //e
		a = null;
	}
	
	public static void main(String[] args){
		//g???? program podczas debugowania wywala się po pierwszym przejsciu przez methodTwo
               zgłaszając wyjątek NullPointer
		Aclass obiektA = new Aclass();
		
		Bclass b = new Bclass(2);
		
		b.methodOne(obiektA.makeU());
		b.methodTwo();
		b.methodThree(obiektA);
		
	}
}

dzieki z góry za pomoc, mam nadzieje że ktoś poświęci na to chwile

0

Wywala się dla metodTwo() ponieważ, masz tablica jest wypełniona do wartości zmiennej next. Reszta jest null'ami.

Pętla for, powinna wyglądać tak:

for(int i = 0; i < next; i++)
0

faktycznie prosty błąd, mam nadzieje że eliminowanie tego typu błędów przyjdzie z czasem, a co do treści zadania... czy zrealizowałem je poprawnie??? Moim skromnym zdaniem, skoro makeA wywołuje anonimową klaśę powinno śię wykonać jej ciało tzn wynikiem powinno być 1,2,3 i znowu 1,2,3, po prostu napisałem to i za bardzo tego nie czuje....

0

Szczerze powiedziawszy się w tym pogubiłem,

Ogólnie w treści zadania masz, że w main masz utworzyć
kilka obiektów A i jeden B.

W poleceniu, nie doczytałem się by
klasa A miała implementować interfej U.

Metoda akceptująca mogłaby zwracać typ boolean

public boolean accept(U u)

w ten sposób wygladałoby to lepiej.
(Wówczas jeżeli niebyło by miejsca, zwracałoby false).

0

Też uważam, że Aclass niepotrzebnie implementuje U

adept Javy napisał(a)

Moim skromnym zdaniem, skoro makeA wywołuje anonimową klaśę powinno śię wykonać jej ciało tzn wynikiem powinno być 1,2,3 i znowu 1,2,3, po prostu napisałem to i za bardzo tego nie czuje....

Jeśli chodzi o makeU bo o nią chyba Ci chodziło pisząc makeA ;), to przy jej wywołaniu nic się nie wypisze, ponieważ ta metoda nie wywołuje klasy anonimowej, tylko ją tworzy. Czyli innymi słowy, w makeU instrukcje mówią, że jeśli ktoś wywoła jakąś metodę z tego nowo tworzonego obiektu, to pojawi się odpowiednia cyferka, ale dopero przy wywołaniu tych metod, w metodzie makeU te instrukcje nie zostaną wykonane, tylko niejako podpięte pod wywołania metod one,two,three.

Być może trochę zagmatwałem, jak coś to pytaj :)

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