Problem z zadaniem

0

Hej, mam problem z zadaniem z javy. Będę wdzięczna za każdą wskazówkę jak się za to zabrać.
Pzdr

Zaprojektować klasę IterNap, reprezentującą łańcuchy znakowe. Klasa IterNap (implementując interfejs Iterable) powinna umożliwiać iterowanie po znakach napisu stosując instrukcję for-each. Implementacja klasy IterNap nie może korzystać z tablic, ani z kolekcji z bibliotek Javy. Stworzyć klasę w taki sposób, aby następujący program

public class IterNapTest {

public static void main(String [] args) 
{
    IterNap napis = new IterNap("prOgrAmoWanIe ObiEktOwe i Gui");

        // iteracja po znakach napisu,
        // domyślnie zaczynając od pierwszego znaku (o indeksie 0)
        // i z krokiem iteracji = 1
    for (char z: napis) 
        System.out.print(z + " ");

    System.out.println();

    napis.ustawPoczatek(2);     // ustawienie początku iteracji (tu: 2-gi znak, o indeksie 2)
    napis.ustawKrok(3);         // ustawienie kroku iteracji (tu: co 3-ci znak)

        // iteracja po znakach napisu,
        // od ustalonego znaku, z określonym krokiem
    for (char z: napis) 
        System.out.print(z + " ");
}

}

wyprowadził na konsolę poniższe wyniki:

p r O g r A m o W a n I e O b i E k t O w e i G u i
O A W I O E O G

0

Jak stworzyć klasę nie korzystając z kolekcji i tablic

1

Moim zdaniem sensem tego zadania jest taka implementacja, która w odpowiedni sposób będzie obliczać indeks znaku w podanym Stringu i zwracać odpowiedni znak. Dlatego nie są potrzebne kolekcje i tablice.

1

Tutaj @Wibowit opisuje jak działa iterowanie w Javie Iterable, Iterator.

Nie znam Javy, ale na szybko można napisać to jakoś tak:

import java.util.Iterator;

public class IterNap implements Iterable<Character> {

    private int start;
    private int end;
    private final String sentence;
    private int step;

    public IterNap(String sentence) {
        this.start = 0;
        this.end = sentence.length();
        this.sentence = sentence;
        this.step = 1;
    }

    public IterNap(String sentence, int start, int step) {
        this.start = start;
        this.end = sentence.length() - start;
        this.sentence = sentence;
        this.step = step;
    }

    public void setStart(int start) {
        this.start = start;
    }

    public void setStep(int step) {
        this.step = step;
    }

    @Override
    public Iterator<Character> iterator() {

        return new Iterator<Character>() {

            int current_index = start;

            @Override
            public boolean hasNext() {
                return current_index < end;
            }

            @Override
            public Character next(){
                Character current_char = sentence.charAt(current_index);
                current_index += step;
                return current_char;
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException("Illegal action.");
            }
        };
    }

    public static void main(String [] args) 
    {
        IterNap napis = new IterNap("prOgrAmoWanIe ObiEktOwe i Gui");

        for (char z: napis) 
            System.out.print(z + " ");

        System.out.println();

        napis.setStart(2);
        napis.setStep(3);

        for (char z: napis) 
            System.out.print(z + " ");
    }

}

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