某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(MyIterator) 实现对该商品名称数组的双向(前向和后向)遍历采用迭代器实现。Java代码
时间: 2024-10-23 20:04:03 浏览: 32
js 数组实现一个类似ruby的迭代器
在Java中,为了实现一个自定义的双向迭代器`MyIterator`来遍历商品名称数组,你可以按照以下步骤进行:
```java
import java.util.ArrayList;
import java.util.List;
// 商品名称类(如果有的话)
class ProductName {
private String name;
// 构造函数、getter和setter省略
@Override
public String toString() {
return this.name;
}
}
// 商品管理系统的双向迭代器类
public class MyIterator {
private List<String> productNames; // 商品名称列表
private int currentIndex = -1; // 当前索引,初始化为-1表示未指向任何元素
private boolean isPrevious; // 是否向前遍历(true)还是向后遍历(false)
// 初始化构造函数,接收商品名称数组
public MyIterator(String[] names) {
this.productNames = new ArrayList<>();
for (String name : names) {
productNames.add(name);
}
}
// 向前移动并返回当前商品名称(如果存在)
public ProductName next() {
if (currentIndex < productNames.size() - 1) {
currentIndex++;
isPrevious = false;
return productNames.get(currentIndex);
} else {
throw new NoSuchElementException("已经到达数组的末尾");
}
}
// 向后移动并返回当前商品名称(如果存在)
public ProductName previous() {
if (currentIndex > 0) {
currentIndex--;
isPrevious = true;
return productNames.get(currentIndex);
} else {
throw new NoSuchElementException("已经到达数组的开头");
}
}
// 检查是否还有下一个元素可以遍历
public boolean hasNext() {
return isPrevious ? currentIndex + 1 < productNames.size() : currentIndex + 1 <= productNames.size();
}
// 检查是否还有上一个元素可以遍历
public boolean hasPrevious() {
return isPrevious ? currentIndex - 1 >= 0 : currentIndex - 1 >= productNames.size();
}
}
```
现在你可以创建一个`MyIterator`实例,并通过`next()`和`previous()`方法进行遍历:
```java
public static void main(String[] args) {
String[] productNames = {"商品A", "商品B", "商品C"};
MyIterator iterator = new MyIterator(productNames);
while (iterator.hasNext()) {
System.out.println(iterator.next());
if (iterator.hasPrevious()) {
System.out.println(iterator.previous());
}
}
}
```
阅读全文