Java: цикл For для объектов строк - PullRequest
0 голосов
/ 06 июня 2018

Я новичок в Java и должен решить это упражнение.У меня есть этот код:

    public class StringList { 
        private String list = "";
        public StringList(String... str) { 
            for (String s : str) list += s+"\t"; 
        }
    }

, и я должен изменить класс так, чтобы его объекты разрешали итерацию, используя эту инструкцию:

for (String s : new StringList("a", "b", "c")) System.out.println(s);

Моя идея состояла в том, чтобы создать список иитерировать на нем.Поэтому я изменил код следующим образом:

public class StringList { 
    private List<String> list = new ArrayList<String>();
    public StringList(String... str) {
        for (String s: str) list.add(s);
    }
}

, но когда я пытаюсь выполнить итерацию с помощью приведенной выше инструкции, я получаю эту ошибку ( Может выполнять итерацию только по массиву или экземпляру java.lang.Итерируемый ) и я часами пытался это исправить, но продолжаю терпеть неудачу.Любая помощь?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Чтобы сделать это простым способом, взгляните на интерфейс java.lang.Iterable: https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html

Если ваш класс StringList реализует его, то инструкция будет работать.Я позволю вам завершить упражнение самостоятельно, но вы можете начать с

public class StringList implements Iterable<String> {
    // the attribute you need to store the strings object

    // your constructor

    @Override
    public Iterator<String> iterator() {
        // This is what you need to fill
    }
}

PS: Использование списка строк в качестве атрибута не является плохой идеей и сэкономит вам много усилий.и время, поиск, что вы можете сделать с ним

0 голосов
/ 06 июня 2018

Вы должны ввести Iterable<String> в StringList следующим образом:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Spliterator;
import java.util.function.Consumer;

public class StringList implements Iterable<String> {
    private List<String> list = new ArrayList<String>();

    public StringList(String... str) {
        for (String s: str) { list.add(s); }
    }

    @Override
    public Iterator<String> iterator() {
        return list.iterator();
    }

    @Override
    public void forEach(Consumer<? super String> action) {
        list.forEach(action);
    }

    @Override
    public Spliterator<String> spliterator() {
        return list.spliterator();
    }
}
...