0

我想在 Java 中创建自己的数字范围,并且仍然能够使用正常的数字。我似乎无法解决它!无需对每个结果进行硬编码。

比方说。整数像 0, 1, 2, 3, 4, 5, 6, 7, 8...。依此类推(我知道!也有负整数)

现在,我想制作我自己的“数字”,既可以用作整数,也可以用作它们自己的类型。

数字范围的简单切割是 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 之后。

这可能吗?

4

2 回答 2

1

我认为这样做的最好方法是创建一个数组,表示每个“正常”int 在 tni 序列中的位置。

例如:

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

是的,这是一个相当不优雅的解决方案,但看起来你首先遇到了一个不优雅的问题。

于 2012-05-28T11:15:11.267 回答
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;
    }
}

于 2012-05-28T11:01:53.563 回答