当前位置: 首页 > 知识库问答 >
问题:

带嵌套循环的Java迭代器

龙逸清
2023-03-14

我有以下python生成器:

def iterator(min,max,step,min2,max2,step2):
    for x in range(min,max,step):
        for y in range(min2, max2, step2):
            result = foo(x, y)
            yield result

而且我想在Java中实现一个迭代器,它的行为有点像以前的生成器。我试图使用两个内部迭代器,但它不起作用。想法?

public class Generator implements Iterator<Integer> {

    private Iterator<Integer> xIterator;
    private Iterator<Integer> yIterator;


    public Generator(int max1, int max2, int min1, int min2, int step1, int step2) {

        xIterator = range(min1, max1, step1).iterator()
        yIterator = range(min2, max2, step2).iterator()

    }

    @Override
    public Integer next() {
        while (xIterator.hasNext()) {
            xval = xIterator.next()
            while(yIterator.hasNext()) {
                yval = yIterator.next()
                return foo(xval, yval)
            }
        }
    }


    public static int[] range(int min, int max, int step) {
        return IntStream.range(min, max / step + 1).map(x -> x * step).toArray();
    }

}

共有1个答案

杜浩壤
2023-03-14

在Python中,在一条yield语句之后,对生成器的下一次调用将在该yield语句之后继续进行,该语句位于内部循环中。

在Java中,在返回之后,对next()的下一次调用将在while循环之外继续,因此它所做的第一件事总是检查xIterator。hasNext(),如果这是真的,则递增xval。我认为这可能是主要的误解。

而且,范围函数似乎没有完成它应该做的事情。也许可以看看Java:相当于Python的范围(int,int)?-其中一些答案还包括step论证。

您发布的代码也不会编译,原因如下:

  • next()并不总是返回值。如果不存在(更多)元素,它应该抛出NosTouchElementException
 类似资料:
  • 对Java来说很新鲜,我在大学的一个入门班做一个项目。我正在尝试做一个方法,在String数组中搜索输入的状态并返回索引。如果用户输入不在数组中的查询,我希望它要求一个新的状态来搜索。我的例外是说“变量statePotion可能尚未初始化。”下面是代码。 提前谢谢!

  • 和其他编程语言一样, Java 允许循环嵌套。如果把一个循环放在另一个循环体内,那么就可以形成嵌套循环。 嵌套循环既可以是 for循环嵌套 while 循环,也可以是 while 循环嵌套 do-while 循环 …… 即各种类型的循环都可以作为外层循环,也可以作为内层循环。 当程序遇到嵌套循环时,如果外层循环的循环条件允许,则开始执行外层循环的循环体,而内层循环将被外层循环的循环体来执行——只是

  • 大家好,初学者, 被困在这里一段时间了。故障排除我要么得到一个无限循环,要么它只循环11次(我希望外部循环21次)。基本上,我读这是因为第一个循环将被执行,因为它将是真的,第二个循环将被执行十次,直到它不是真的。然后外部循环将绕过内部循环继续运行(因为条件不再有效),直到外部条件不再为真。 提前道谢!

  • 转换是否正确,或者是否有更好的方法将嵌套循环转换为流计算? 为什么流变体比旧变体慢得多? 为什么parallel()语句实际上将时间从0.19s增加到0.25s? 我知道微基准是脆弱的,并行性只有在遇到大问题时才值得,但对于CPU来说,即使是0.1秒也是永恒的,对吗? 更新 null

  • 问题内容: 考虑以下代码: 我有一些要求,例如我想读取/获取所有类型的键和值以进行某些处理,但我无法定义它,因为我将获得动态JSON输入(例如,作为字符串,那么第二级循环将给我索引)数组并处理每个具有key 和的JSON 。 我希望遍历其中包含的每个键/值对,浏览地图的最有效方法是什么? 注意:我是Go-lang的新手,也欢迎您提出问题。 问题答案: 请参阅此博客条目,该条目彻底涵盖了该主题,尤其

  • 数据库表: 胶片(id\U胶片主键,名称) 流派(id_genrePK,名称) film_genre(id_filmFK,id_genreFK) 这将输出流派表中的所有流派: 这将输出特定电影的电影类型表中的所有选定类型: 我有一个问题,从数据库输出数据到多个选定的列表中的形式。这是一个电影数据库,我正在进行Foreach迭代,以读取电影流派的所有行,并输出到多个选择字段。但是我在向列表输出“选定