Jak już wcześniej pisałem nadrabiam zaległości z programowania , dziś mam właściwie bardzo podobny problem jak ostatnio( Ale to nie istotne bo i tak temat pewnie przez ogromną większość forum jest kompletnie nie znany )
Najpierw wkleję treść ćwiczenia udostępnionego przez mojego wykładowcę: A później zadam pytanie dotyczące go
Zdefiniować klasę Incrementor w taki sposób, aby następujący kod:
ackage incr;
import static incr.Incrementer.*;
public class Test {
public static void main(String[] args) {
// najprostsza iteracja - krok = 1
for(int k : in(1, 10)) System.out.print(k + " ");
System.out.println();
// Podany krok
for(int k : in(1, 10).by(2)) System.out.print(k + " ");
System.out.println();
// Można w odwrotną stronę - tu domyślnie krok = -1
for(int k : in(10, 1)) System.out.print(k + " ");
System.out.println();
// Ale można zakres formułować od min do max, a podany krok będzie
// decydował o kierunku iteracji
for(int k : in(1, 10).by(-1)) System.out.print(k + " ");
System.out.println();
// W trakcie iteracji można zmieniac krok
Incrementer inc;
for (int i : inc = in(1,10) ) {
if (i == 4) inc.by(2);
System.out.print(i + " ");
}
System.out.println();
for (int i : inc = in(1,10) ) {
if (i == 8) inc.by(-2);
System.out.print(i + " ");
}
System.out.println();
for(int k : inc = in(10, 1)) {
if (k == 5) inc.by(1);
System.out.print(k + " ");
}
}
}
dał w wyniku:
1 2 3 4 5 6 7 8 9 10
1 3 5 7 9
10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
1 2 3 4 6 8 10
1 2 3 4 5 6 7 8 6 4 2
10 9 8 7 6 5 6 7 8 9 10
Wymaganie:
w programie (w tym w klasie Incrementer) nie wolno stosować taablic ani kolekcji.
Podpowiedzi:
in(...) i by(...) są metodami w klasie Incrementer
Incrementer winien implementować interfejs Iterable
Pierwszy problem: to metoda in() która według mnie powinna znajdować się w clasie Test a dopiero wtedy z niej będę mógł się odwołać do metody z klasy Incrementator, prawda? bo w tej postaci która jest przedstawiona ,klasa test nie może wywołać metody in() z klasy Incrementator nawet gdyby była static.
Dwa: no więc zaimplementowałem interfejs Iterable dla Incrementer i interfejs iterator dla klasy Iteratora. Wszystko super, ale. Przyjąłem że in() zwraca mi obiekt Incrementer( widać w kodzie że metoda ta zwraca właśnie obiekt typu Incrementer) i zwraca obiekty typu Incrementer więc gdy już w pierwszym wywołaniu in() obiekty te są przypisywane do int k ja nie rozumiem jak.
Pozdrawiam i szczerze dziękuje każdemu komu będzie się chciało pomyśleć nad wytłumaczeniem mi tego.