Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 1
Регистрация: 24.03.2018
Сообщений: 29

Про hasNext и next

15.05.2018, 06:33. Показов 2635. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package ru.job4j.evenIterator;
 
import java.util.Iterator;
import java.util.NoSuchElementException;
 
/**
 * Class EvenIterator
 *
 * @author Aleksandr Vysotskiy.
 * @version 1.0
 * @since 14.05.18
 */
 
public class EvenIterator implements Iterator {
 
    /**
     * This array serves to store objects.
     */
    private int[] array;
 
    /**
     * This is a index.
     */
    private int index;
 
    /**
     * This is a constructor
     *
     * @param array is this.array.
     */
    public EvenIterator(int[] array) {
        this.array = array;
    }
 
    /**
     * This is hasNext method.
     *
     * @return true if there is next object, other false.
     */
    @Override
    public boolean hasNext() {
        boolean even = false;
        while (this.index != array.length) {
            if (this.array[index] % 2 == 0) {
                even = true;
               break;
            }
            this.index++;
        }
        return even;
    }
 
    /**
     * This is method next.
     *
     * @return next object.
     */
    @Override
    public Object next() {
        if (this.index >= this.array.length) {
            throw new NoSuchElementException();
        }
        return this.array[index++];
    }
}
Это тест
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package ru.job4j.evenIterator;
 
 
import java.util.Iterator;
import java.util.NoSuchElementException;
 
import org.junit.Before;
import org.junit.Test;
 
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
 
 
public class EvenIteratorTest {
 
    private Iterator<Integer> it;
 
    @Before
    public void setUp(){
        it = new EvenIterator(new int[]{1, 2, 3, 4, 5, 6, 7});
    }
 
    @Test(expected = NoSuchElementException.class)
    public void shouldReturnEvenNumbersSequentially () {
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(2));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(4));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(6));
        assertThat(it.hasNext(), is(false));
        it.next();
    }
 
    @Test
    public void sequentialHasNextInvocationDoSentAffectRetrievalOrder () {
        assertThat(it.hasNext(), is(true));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(2));
        assertThat(it.next(), is(4));
        assertThat(it.next(), is(6));
    }
 
    @Test
    public void  shouldReturnFalseIfNoAnyEvenNumbers(){
        it = new EvenIterator(new int[]{1});
        assertThat(it.hasNext(), is(false));
    }
 
    @Test
    public void allNumbersAreEven(){
        it = new EvenIterator(new int[]{2,4,6,8});
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(2));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(4));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(6));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(8));
    }
}
Код не проходил тест
Java
1
2
3
4
5
6
7
8
    @Test
    public void sequentialHasNextInvocationDoSentAffectRetrievalOrder () {
        assertThat(it.hasNext(), is(true));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(2));
        assertThat(it.next(), is(4));
        assertThat(it.next(), is(6));
    }
Выводил в консоль:
java.lang.AssertionError:
Expected: is <4>
but: was <3>
Expected :is <4>

Actual :<3>

После того как я случайно добавил в метод next hasNext(); все заработало.

Java
1
2
3
4
5
6
7
8
9
10
    @Override
    public Object next() {
        if (this.index >= this.array.length) {
            throw new NoSuchElementException();
        }
        
        hasNext();
        
        return this.array[index++];
    }
Может кто объяснить что произошло?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.05.2018, 06:33
Ответы с готовыми решениями:

hasNext(); и next();
есть код public class ArrayIterator { private int a; private int index; public ArrayIterator(){ a = new int ; ...

Для чего написано: while (it.hasNext()
package com.company; import java.util.ArrayList; import java.util.Iterator; public class Main { public static void main(String...

Правильно ли реализованы методы hasNext() и next()?
я написал generic класс с интерфейсом итератора. хочу спросить правильно ли я реализовал методы hasNext() и next()? package...

5
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
15.05.2018, 06:55
Цитата Сообщение от _Electric_ Посмотреть сообщение
Может кто объяснить что произошло?
произошло два выполнения index++ одно в хазНекст и второе в ретурне некст.
Если у тебя итератор только по четным должен ходить, то следовательно шаг и должен быть 2, хотя я может просто не понимаю логики твоей. Например зачем в методе хазНекст ты инкрементишь индекс? Там же просто надо вернуть есть ли следующее четное число
И зачем ты кругом пишешь this там где это и так понятно что речь о переменной данного класса.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
15.05.2018, 08:44
Убери
Цитата Сообщение от _Electric_ Посмотреть сообщение
Java
1
this.index++;
из hasNext.
0
0 / 0 / 1
Регистрация: 24.03.2018
Сообщений: 29
16.05.2018, 22:07  [ТС]
Когда убираю у меня комп зависает при прохождении теста.

Добавлено через 7 минут
Цитата Сообщение от Welemir1 Посмотреть сообщение
произошло два выполнения index++ одно в хазНекст и второе в ретурне некст.
Если у тебя итератор только по четным должен ходить, то следовательно шаг и должен быть 2, хотя я может просто не понимаю логики твоей. Например зачем в методе хазНекст ты инкрементишь индекс? Там же просто надо вернуть есть ли следующее четное число
И зачем ты кругом пишешь this там где это и так понятно что речь о переменной данного класса.
Тесты начал проходить после того как я добавил hasNext();

между
Java
1
2
3
4
5
    }
 
        hasNext();
 
        return this.array[index++];
В массиве цифры идут не по порядку поэтому надо проверить все.

Про this просто я слышал что считается хорошим тоном писать везде this.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.05.2018, 22:36
Цитата Сообщение от _Electric_ Посмотреть сообщение
комп зависает при прохождении теста
таймаут поставь
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
17.05.2018, 11:37
Цитата Сообщение от _Electric_ Посмотреть сообщение
Когда убираю у меня комп зависает при прохождении теста.
Потому что у тебя hasNext кривой. И next тоже

Добавлено через 51 минуту
Например

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Iterator;
import java.util.NoSuchElementException;
 
final class EmptyEvenIterator implements Iterator<Integer> {
 
    private static final EmptyEvenIterator INSTANCE = new EmptyEvenIterator();
 
    static EmptyEvenIterator getInstance() {
        return INSTANCE;
    }
 
    private EmptyEvenIterator() {
    }
 
    @Override
    public boolean hasNext() {
        return false;
    }
 
    @Override
    public Integer next() {
        throw new NoSuchElementException();
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Iterator;
import java.util.NoSuchElementException;
 
final class ZeroEvenIterator implements Iterator<Integer> {
 
    private static final ZeroEvenIterator INSTANCE = new ZeroEvenIterator();
 
    static ZeroEvenIterator getInstance() {
        return INSTANCE;
    }
 
    private boolean hasNext;
 
    private ZeroEvenIterator() {
        hasNext = true;
    }
 
    @Override
    public boolean hasNext() {
        return hasNext;
    }
 
    @Override
    public Integer next() {
        if (hasNext()) {
            hasNext = false;
            return 0;
        }
        throw new NoSuchElementException();
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Iterator;
import java.util.NoSuchElementException;
 
final class SingletonEvenIterator implements Iterator<Integer> {
 
    static SingletonEvenIterator of(int value) {
        return new SingletonEvenIterator(value);
    }
 
    private boolean hasNext;
    private final int value;
 
    private SingletonEvenIterator(int value) {
        this.value = value;
        this.hasNext = true;
    }
 
    @Override
    public boolean hasNext() {
        return hasNext && (value & 1) == 0;
    }
 
    @Override
    public Integer next() {
        if (hasNext()) {
            hasNext = false;
            return value;
        }
        throw new NoSuchElementException();
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.Arrays;
import java.util.Iterator;
import java.util.NoSuchElementException;
 
public final class ArrayEvenIterator implements Iterator<Integer> {
 
    static ArrayEvenIterator of(int[] array) {
        return new ArrayEvenIterator(Arrays.copyOf(array, array.length));
    }
 
    private final int[] array;
 
    private int currentIndex = -1;
    private int nextIndex = -1;
 
    private ArrayEvenIterator(int[] array) {
        this.array = array;
    }
 
    @Override
    public boolean hasNext() {
        if (nextIndex > array.length) {
            return false;
        }
        if (nextIndex > currentIndex) {
            return true;
        }
        for (int i = currentIndex + 1; i < array.length; i++) {
            if ((array[i] & 1) == 0) {
                nextIndex = i;
                return true;
            }
        }
        nextIndex = array.length + 1;
        return false;
    }
 
    @Override
    public Integer next() {
        if (hasNext()) {
            currentIndex = nextIndex;
            return array[currentIndex];
        }
        throw new NoSuchElementException();
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.Iterator;
 
public final class EvenIterator {
 
    static Iterator<Integer> of(int value) {
        switch (value) {
            case 0:
                return ZeroEvenIterator.getInstance();
            case 1:
                return EmptyEvenIterator.getInstance();
            default:
                return SingletonEvenIterator.of(value);
        }
    }
 
    static Iterator<Integer> of(int... values) {
        switch (values.length) {
            case 0:
                return EmptyEvenIterator.getInstance();
            case 1:
                return of(values[0]);
            default:
                return ArrayEvenIterator.of(values);
        }
    }
 
    private EvenIterator() {
        throw new UnsupportedOperationException("Utility class");
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import java.util.Iterator;
import java.util.NoSuchElementException;
 
import org.junit.Before;
import org.junit.Test;
 
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
 
public final class EvenIteratorTest {
 
    private Iterator<Integer> it;
 
    @Before
    public void setUp(){
        it = EvenIterator.of(1, 2, 3, 4, 5, 6, 7);
    }
 
    @Test(expected = NoSuchElementException.class)
    public void shouldReturnEvenNumbersSequentially () {
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(2));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(4));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(6));
        assertThat(it.hasNext(), is(false));
        it.next();
    }
 
    @Test
    public void sequentialHasNextInvocationDoSentAffectRetrievalOrder () {
        assertThat(it.hasNext(), is(true));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(2));
        assertThat(it.next(), is(4));
        assertThat(it.next(), is(6));
    }
 
    @Test
    public void  shouldReturnFalseIfNoAnyEvenNumbers(){
        it = EvenIterator.of(1);
        assertThat(it.hasNext(), is(false));
    }
 
    @Test
    public void allNumbersAreEven(){
        it = EvenIterator.of(2,4,6,8);
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(2));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(4));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(6));
        assertThat(it.hasNext(), is(true));
        assertThat(it.next(), is(8));
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2018, 11:37
Помогаю со студенческими работами здесь

HasNext() для QList<T>
Здравствуйте. Текущее объявление обычное: QList&lt;Comment&gt; comments; QList&lt;Comment&gt;::iterator itcom; Понадобился метод...

И снова про PopupMenu (было про длину, теперь про ширину)
Добавляем в пустое PopupMenu несколько пунктов динамически (шириной, например, до 50 символов). Отображаем его – всё нормально. Затем...

Про ШИМ в роли ЦАП и про АЦП на примере резистивного датчика
Есть датчик угарного газа MICS-5525. Он состоит из чувствительного слоя (пины 1-3, см. вложение), который меняет своё сопротивление в...

Версии Делфи 10 и 7. Можно где-то почитать про их особенности, про совместимость?
Переносили вы проекты из делфи 7 на делфи 10. Может знаете в чем особенности, где можно побольше информации почитать, что может не...

Как заблокировать windwos (нет, я не про вирус, а про win+l)
Возможно такой вопрос уже задавали такой вопрос, но всё же как заблокировать компьютер (вызвать экран блокировки как win+l), а то везде...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru