我想用Java创建自己的数字范围,但仍然可以使用普通数字。我似乎无法解决它!这不是每个结果的硬编码。
让我们说吧。整数像0,1,2,3,4,5,6,7,8 ......等等(我知道!还有负的int)
现在,我想创建自己的“数字”,可以用作整数和自己的类型。
数字范围的简单切割是1,2,3,5,4,7,6,9,10,11,8,13,14,15,12,17,18,19,20,21 ,22,23,16 ......等......所有数字的表格如下所示。 (我不需要767以上的任何数字,但下一个数字是512,然后是769 +,所以一个。
1 2 3 5 4 7 6 9-11 8 13-15 12 17-23 16 25-31 24 33-47 32 49-63 48 65-95 64 97-127 96 129-191 128 193-255 192 257-383 256 385-511 384 513-767
现在让我们调用这些数字tni(与int相反)
假设我想将(int)A添加到(tni)B这应该是正常的数学运算。因此,如果A = 4且B = 6,结果将是10,而不是8。
但是,如果我想看看2个tni中哪一个是最高的。假设A = 8且B = 10,id会告诉我A更高,因为在tni范围内,8在10之后。
这可能吗?
答案 0 :(得分:1)
我看到这样做的最好方法是创建一个数组,表示tni序列中每个'normal'int的位置。
例如:
int[] tniArray = new int[768];
tniArray[0] = 0;
tniArray[1] = 1;
tniArray[2] = 2;
tniArray[3] = 3;
tniArray[4] = 5; //This is because the number 4 comes at position 5 in the tni sequence
tniArray[5] = 4;
tniArray[6] = 7;
tniArray[7] = 6;
tniArray[8] = 11;
//etc.
然后,您可以将它们与这样的方法进行比较:
boolean IntGreaterThanTni(int Int, int Tni){
return (Int > tniArray[Tni]);
}
是的,这是一个相当不优雅的解决方案,但看起来你首先有一个不优雅的问题。
答案 1 :(得分:0)
你的问题很混乱,但这就是我认为你的意思。您有一个有序的数字序列,它不是由任何函数定义的。您希望能够判断序列中的给定数字是在同一序列中的另一个之前还是之后。
看起来你不能使用像二进制搜索这样的东西,所以如果你想确定一个数字在序列中的位置,那么快速而又脏的方法是迭代来自开始,并在找到目标号码时停止。潜在地,这意味着您可以遍历整个序列两次,以便在序列中找到两个数字A和B的位置,然后确定一个是否在另一个之前。
以下代码可以满足您的需求。它不是OO,但它有效。
public class FunnySequence {
public static void main(String[] args) {
// First few numbers in the sequence
int arr[] = new int[]{
1,
2,
3,
5,
4,
7,
6,
9,
10,
11,
8
};
int a = 8;
int b = 10;
System.out.println("Position of A: "+
findPosition(arr, a));
System.out.println("Position of B: "+
findPosition(arr, b));
}
public static int findPosition(int[] arr, int num) {
for (int i = 0; i < arr.length; i++) {
if (num == arr[i]) {
return i;
}
}
return -1;
}
}