有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在java中添加自己的数字范围

我想用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,我会告诉我A更高,在tni范围内,8在10之后

这可能吗


共 (2) 个答案

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

    是的,这是一个相当不雅的解决方案,但似乎你首先遇到了一个不雅的问题

  2. # 2 楼答案

    你的问题很令人困惑,但我认为你的意思是这样的。你有一个没有任何函数定义的有序数字序列。你想知道序列中的一个给定数字是在同一序列中的另一个之前还是之后

    看起来你不可能使用任何类似于二进制搜索的方法来实现这一点,所以如果你想确定一个数字在序列中的位置,快速而肮脏的方法是从头开始遍历序列,当你找到目标数字时停止。这可能意味着您可以在整个序列中迭代两次,以找到序列中两个数字A和B的位置,然后确定其中一个是否在另一个之前

    下面的代码符合您的要求。这不是很糟糕,但很管用

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