首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反向遍历数组,没有负号

反向遍历数组,没有负号
EN

Stack Overflow用户
提问于 2017-09-25 15:22:49
回答 6查看 242关注 0票数 3

在今天的工作面试中被问到这个问题。我肯定这是个很简单的把戏,但我想不起来。我如何才能不使用“减号”(-)符号(所以循环中没有i--,或者类似的东西),从端到开始遍历一个简单的Java数组(例如,为了将所有值从右到左的总和)?

编辑:,我很确定这是一个不涉及特定于Java的结构的技巧(比如Collections)。不幸的是,我想以后我会自己考虑的,所以我没有问答案是什么。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-09-25 15:36:02

递归是一种选择:

代码语言:javascript
复制
int[] numbers = {0,1,2,3,4,5,6,7,8,9,10};

public void traverseReversed(int[] a) {
    traverseReversed(a, 0);
}

private void traverseReversed(int[] a, int i) {
    if ( i + 1 < a.length ) {
        // Traverse the rest of the array first.
        traverseReversed(a, i+1);
    }
    System.out.println(a[i]);
}

public void test() throws Exception {
    System.out.println("Hello world!");
    traverseReversed(numbers);
}
票数 9
EN

Stack Overflow用户

发布于 2017-09-25 15:28:18

如果允许您使用集合,则可以轻松地将其反转。请看下面的代码-

代码语言:javascript
复制
Collections.reverse(Arrays.asList(array))
票数 3
EN

Stack Overflow用户

发布于 2017-09-25 16:06:35

不知道面试中的问题是否有一点明智,但这个答案会以某种方式出现。

只需使用~一元位补码运算符即可获得自定义-1

代码语言:javascript
复制
String[] array = {"aaa","bbb","ccc"};

int minusOne = ~0;// unary bitwise complement, yields -1


for(int i = array.length + minusOne; i >= 0; i = i + minusOne){

    System.out.println(array[i]);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46408786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档