Использовать типизированный класс ArrManager, В котором находится инкапсулированный массив типа данных Object[] и реализованны интерфейсы Iterable, Iterator.
Создать Класс который реализует итератор для перебора внутреннего массива объектов от начала до конца.
Этот итератр должен в конструкторе принимать позиции начала и конца перебора.
Если значение начала меньше нуля то в итераторе оно должно заменятся на 0.
Если значение конца больше размера то оно заменяется на значение размера.
main :
public class Home_work_Iterator_Iterable {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ArrManager<Integer> arm = new ArrManager<>(new Integer[]{1,2,3});
System.out.println(arm.toString());
}
}
Arrmanger class :
import java.util.Iterator;
/**
*
* @author Pivar
* @param <T>
*/
public class ArrManager<T> implements Iterator<T>, Iterable<T> {
private Object[] data;
private int size;
public ArrManager() {
}
public Object[] getData() {
return data;
}
public void setData(Object[] data) {
this.data = data;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public T get(int index) {
if (index >= 0 && index < size) {
return (T) data[index];
}
return null;
}
@Override
public String toString() {
return "ArrManager{" + "data=" + data + ", size=" + size + '}';
}
@Override
public boolean hasNext() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public T next() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Iterator<T> iterator() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
ArrmanagerIterator class:
import java.util.Iterator;
/**
*
* @author Pivar
* @param <T>
*/
public class ArrManagerIterator<T> implements Iterator<T> {
private int cursor;
private ArrManager arm;
private int cursor_Start;
private int cursor_End;
public ArrManagerIterator(ArrManager<T> arm, int cursor_Start, int cursor_End) {
this.arm = arm;
this.cursor_Start = (cursor_Start < 0) ? 0 : cursor_Start;
this.cursor_End = (cursor_End > arm.getSize() - 1) ? arm.getSize() - 1 : cursor_End;
this.cursor = this.cursor_Start;
}
@Override
public boolean hasNext() {
if (cursor >= cursor_Start && cursor <= cursor_End) {
return true;
}
this.cursor = cursor_Start;
return false;
}
@Override
public T next() {
return (T) arm.get(cursor++);
}
}
У меня не получается вывести массив что бы проверить правильно ли по заданию. Да и вообщем нужна помощь, мне кажется что то я сделал не так =(
Чтобы ваш метод toString
работал как задумано, нужно в нём выводить все элементы внутреннего массива, который хранит данные, например, так:
@Override
public String toString() {
String arrayData = Arrays.toString(data);
return "ArrManager{" + "data=" + arrayData + ", size=" + size + '}';
}
import java.util.Arrays;
import java.util.Iterator;
public class ArrManager<T> implements Iterable<T> {
private final T[] data;
public ArrManager(T[] t) {
this.data = t;
}
@Override
public String toString() {
return "ArrManager{" + "data=" + Arrays.toString(data) + ", size=" + data.length + '}';
}
@Override
public Iterator<T> iterator() {
return new ArrManagerIterator<>(0, data.length);
}
private class ArrManagerIterator<T> implements Iterator<T> {
private final int cursorStart;
private final int cursorEnd;
private int cursor;
public ArrManagerIterator(int cursorStart, int cursorEnd) {
this.cursorStart = (cursorStart < 0) ? 0 : cursorStart;
this.cursorEnd = (cursorEnd > data.length - 1) ? data.length - 1 : cursorEnd;
this.cursor = this.cursorStart;
}
@Override
public boolean hasNext() {
return cursor <= cursorEnd;
}
@Override
public T next() {
return (T) data[cursor++];
}
}
}
public class Home_work_Iterator_Iterable {
public static void main(String[] args) {
ArrManager<Integer> arm = new ArrManager<>(new Integer[]{1, 2, 3});
Iterator<Integer> i = arm.iterator();
while(i.hasNext()) System.out.println(i.next());
System.out.println(arm.toString());
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно, чтобы мячик отскакивал от синего дива, а не проходил сквозь него