Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2015, 02:59   #1
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию for-each

Доброго времени суток
Есть класс, написанный своими руками ArrayVector вот c такими полями
Код:
public class ArrayVector implements Vector {

    private double[] mas;
    private int pos;

....
к нему нужно применить for-each
Код:
public static void main(String[] args) {
 Vector vectList = new ArrayVector();
        double[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        vectList.addArray(a);
for(double x : vectList){
            System.out.println(x);
        }
...
Для этого мне нужно в мой интерфейс Vector унаследовать еще один интерфейс :
Код:
public interface Vector extends Iterable{
и в классе переопределить итератор

Какая его логика, как он должен работать .. я не совсем могу понять. Я зашел в ступор
Кто имел дело с подобным, помогите разобраться и понять
viks1 вне форума Ответить с цитированием
Старый 21.12.2015, 21:31   #2
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию Решение!

Итак, спасибо всем :D
Спустя сутки перекапывания просторов гугла и помощи друга получилось реализовать таким путем:

Так как мой класс работает сугубо с типом данных double , применяем generic :
Код:
public interface Vector extends Iterable<Double>{
...
}
Далее переопределяем методы в нашем классе вот по такой структуре:
Код:
public class ArrayVector implements Vector {

 
    private double[] mas;
    private int pos;
    private int index;
......
@Override
    public Iterator iterator() {
        return new Iterator() {
            @Override
            public boolean hasNext() {
                return index != mas.length-1;
            }

            @Override
            public Object next() {  
                index++;
                return getValue(index); // это мой личный метод, можно просто юзать mas[index]; вместо getValue(index);
            }

            @Override
            public void remove() {
                throw new UnsupportedOperationException("Not supported yet.");
            }
        };
    }
Далее уже в main пользуемся for-each :
Код:
Vector vectList = new ArrayVector(2);
        double[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        vectList.addArray(a);
        vectList.show(); // вызов моего метода, для вывода значений. Ради интереса, что бы сверить с нижним выводом for-each

        for(double x : vectList1){
            System.out.print(x+" ");
        }

Последний раз редактировалось viks1; 21.12.2015 в 21:33.
viks1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск