我真的很累,所以这可能是一个愚蠢的问题,而我只是没有直接思考。但我试图基本上这样做,以便我可以映射
1 => 0
2 => 1
4 => 2
8 => 3
这方面的背景是我有一系列的东西。然后我传入一个值,如果值的数字为1,我想访问数组的偏移量为0,如果值的宽度为2,偏移量为1,如果值为4,则偏移量为2,等等。 / p>
有什么数学方法可以做到这一点,简洁明了吗?我认为一个HashMap或者其他东西会有点过分,我确信有一个比8个数组的查找更好的方法。
答案 0 :(得分:1)
在给定模式中映射整数的简单和数学方法将是
nodejs -v
如果模式继续为x => log2(x)
,16 => 4
,32 => 5
等等。
大多数语言都有一种方法来计算标准库中数字的对数。如果该方法在2以外的基数中计算对数,则可以创建一个帮助方法来计算到基数2的日志。
64 => 6
答案 1 :(得分:0)
使用开关循环。
开关(值){
案例1:返回1;
打破;
案例2:返回2;
打破;
案例4:返回3;
打破;
案例8:返回4;
打破;
默认值:返回0;
}
答案 2 :(得分:0)
试试这个。如果数组有错误的数据,您可以添加条件以抛出异常。
public static void main(String[] args) {
int[] vals = new int[]{1,2,4,8};
for(int i : vals){
System.out.println(getResult(i));
}
}
private static int getResult(int element){
int i = -1;
int temp = 2;
while(true){
i++;
int result = (int) Math.pow(temp,i);
if(result == element){
return i+1;
}
}
}