今天在面试时被问到这个问题。我确定这是一个非常简单的技巧,但我想不出来。如何从头到尾遍历一个简单的Java数组(例如,为了从右到左聚合所有值的总和),而不使用“减号”(-
)符号(所以没有{{ 1}}在循环中,或类似的东西)?
编辑:我很确定它应该是一个不涉及特定于Java的结构的技巧(如i--
)。不幸的是我以为我会在以后自己想到它,所以我没有问到答案是什么:/
答案 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]);
}