反向遍历数组,没有减号

时间:2017-09-25 15:22:49

标签: java

今天在面试时被问到这个问题。我确定这是一个非常简单的技巧,但我想不出来。如何从头到尾遍历一个简单的Java数组(例如,为了从右到左聚合所有值的总和),而不使用“减号”(-)符号(所以没有{{ 1}}在循环中,或类似的东西)?

编辑:我很确定它应该是一个不涉及特定于Java的结构的技巧(如i--)。不幸的是我以为我会在以后自己想到它,所以我没有问到答案是什么:/

6 个答案:

答案 0 :(得分:9)

递归是一个选项:

import A
A.SETTING_VARIABLE = "TEST_VALUE"

答案 1 :(得分:3)

如果您被允许使用收藏集,则可以轻松撤消它。请参阅以下代码 -

id | id_continent       | id_country | zip_code | id_city
 1      Europe             England     WC2N 5DU    70122
 2      North America        USA        10004      70114
 3      Europe             Belgrade     11000      70106
 4      Europe              Moscow      101000     70220

答案 2 :(得分:2)

如果您被允许使用像@Naseef这样的库,您也可以使用Common Lang和反向数组:

ArrayUtils.reverse(int[] array)

答案 3 :(得分:2)

如果你有足够的堆栈空间,你可以随时使用递归,并在你的出路上处理元素"

data.set_index(y='lats', inplace=True)
data.set_index(x='lons', inplace=True)

编辑,只是为了确保:代码将以void walkArray(int a[],int i){ if(i+1<a.length)walkArray(a,i+1); System.out.println(a[i]); }

的形式启动

答案 4 :(得分:2)

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

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

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]);
}

答案 5 :(得分:1)

如果您不想使用递归,则可以使用按位算术。诀窍在于按位非运算符。基本上它否定了数字并从中减去了数字。因此~(~i+1)-(-i-1+1)-1相同,后者简化为i-1

int i = array.length;
while(i > 0) {
  i = ~(~i + 1);
  System.out.println(array[i]);
}