我正在尝试定义一个方法(基本上是一个哈希码),它返回2个连续数字的相同值。
public int someMethod(int x) {
// do something with x which return same value for 2 consecutive number
// x , x-1 OR x, x+1
}
我试过了 -
public int someMethod(int d) {
return (int) (((float)d / 3) + 0.5);
}
但它不适用于所有值。就像它能够为3& 4但不适用于4& 5.它应该为具有1个差异的所有整数返回相同的值。可能是我需要一种无法生成相同值但最好生成相同值的方法。
答案 0 :(得分:3)
您可以删除数字的最低位,该位数在奇数和偶数之间变化。这将返回您想要的内容:
public int someMethod(int x) {
// Since you want 3 and 4 to match, you add one here so they become 4 and 5
x++;
return x >> 1;
}
这是有效的,因为二进制数表示为1和0的序列。剥离最低位时,可以将可以表示的数字减少一半。一些例子可能有所帮助:
删除最后一位数字时:
正如alfasin所指出的,这相当于将整数除以2,这将剥去任何余数。
答案 1 :(得分:0)
我认为您的问题可能会添加一个新参数来解决。也许是这样 -
public int someMethod(int x, int default){
if(x - default == 1 || x - default = -1){
return x;
}
}
但我没有使用某种方法......
答案 2 :(得分:0)
1,2,3,4,5,6 ...... 10_000,10_001所有这些都是连续的数字。你会只通过其中的2个或其中一些。你的问题不明确。
即:传递(3,4)然后(4,5)。对于这些集合,您是否希望获得相同的结果,因为通用数字为#34; 4"。
public static void main(String[] args) {
System.out.println(someMethod(3, 4));
System.out.println(someMethod(5, 4));
System.out.println(someMethod(6, 4));
}
/**
* if value and common are not consecutive return value;
*
* @param value
* @param common
* @return
*/
public static int someMethod(int value, int common) {
int x = value - common;
if (x == 1 || x == -1)
return common;
return value;
}
控制台结果: 4 4 6