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

是否可以将增强循环中的最后一个索引循环到第一个索引?

甄佐
2023-03-14

我想知道,在这种情况下,我们可以使用增强的for而不是常规的for循环

for (int i = 0; i < arr.length; i++) {

        System.out.println(arr[i]);

    }


    for (int temp : arr) {

        System.out.println(temp);

    }

在这种情况下,我可以使用增强的for吗?

    for (int i = arr.length; i <= 0; i--) {

        System.out.println(arr[i]);
    }

共有2个答案

斜成济
2023-03-14

实际上,建议的重复项似乎都不能为数组而不是列表提供解决方案。

不幸的是,没有装箱和拆箱是无法做到这一点的。

Iterable<Integer> reverse(final int[] arr) {
    return () -> new Iterator<Integer>() {
        private int curr = arr.length - 1;
        
        @Override
        public boolean hasNext() {
            return curr >= 0;
        }
        
        @Override
        public Integer next() {
            if (curr < 0) {
                throw new NoSuchElementException("exhausted");
            }
            return arr[curr--];
        }
    };
}

(也许在瓦尔哈拉,拳击和拆箱是不必要的。)

用法:

for (int x : new int[] {1, 2, 3}) System.out.println(x);
1
2
3
for (int x : reverse(new int[] {1, 2, 3})) System.out.println(x);
3
2
1
崔涵亮
2023-03-14

根据语言规范,

for (initialization; termination;
     increment) {
    statement(s)
}

因此,在增强的情况下,您可以正确地递增/递减它,但不能正确地终止

<代码>i

for (int i = arr.length-1; i >= 0; i--) {

        System.out.println(arr[i]);
 }

注意:数组将从零索引开始,因此如果要反转,请始终考虑int i=arr.length-1。

 类似资料:
  • 问题内容: 是否可以在增强的for循环中找到当前索引?如果可以,怎么办? 我知道我们可以用一个额外的变量来检查它。但是还有其他方法。 问题答案: 是否可以在增强的for循环中找到当前索引? 不。如果需要索引,建议您使用普通的for循环。 但是,在这种情况下,您似乎实际上并不需要索引。除非您要处理某种非常奇怪的列表类型,否则可以使用和使用方法,如下所示:

  • 我正在逐个迭代字符串对象列表中的元素: 在这里,每次我调用list上的get()时,列表都会从其一端一直迭代到第i个元素——因此上面循环的复杂性是O(n^2)。 是a.)对于增强型for循环,与上面相同,还是b.)对于循环,将指针保持在最后一个指针所在的位置,因此下面循环的复杂性是O(n)? 如果上面的情况(b)——我想是这样的——在列表上使用迭代器有什么好处吗。这是简单的迭代--没有回头路 蒂亚

  • 我的程序中有两个while循环。第一个是针对游戏菜单的,第二个是针对实际游戏的。如果“Gameover-Event”发生,我想返回菜单。我不知道该怎么做。

  • 问题内容: 在以下语法不再有效的Swift 3.0中,您将如何表达递减索引循环? 问题答案: 这是一种更简单(更快速)的方法。

  • 问题内容: 问题很简单。我的代码中有一个循环: 在此循环中,当我们处于第一次或最后一次迭代时,我想做出不同的反应。 这个怎么做? 问题答案: 您可以使用一个计数器:

  • 我编写了如下代码,但它没有正确返回第一个重复出现的字母。 示例:在单词“statistics”中,重复出现的字母是s、t和i,但字母t的递归速度比字母s和i快,但我的程序返回s而不是t。 根据手头的任务,使用两个for循环返回t需要做什么?