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の場合、結果は8ではなく10になります。

しかし、2つのtniのどちらが最も高いかを確認したい場合。A=8およびB=10とすると、idは、tniの範囲のように、Aが高いことを示し、8は10の後になります。

これは可能ですか?

4

2 に答える 2

1

これを行うための最良の方法は、tniシーケンス内の各「通常の」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]);
}

はい、これはかなりエレガントでない解決策ですが、そもそもエレガントでない問題があるようです。

于 2012-05-28T11:15:11.267 に答える
0

あなたの質問はかなり紛らわしいですが、これがあなたが言っていることだと思います。関数によって定義されていない順序付けられた数列があります。シーケンス内の特定の番号が同じシーケンス内で別の番号の前後にあるかどうかを判別できるようにする必要があります。

これには二分探索のようなものを使用できるようには見えないので、シーケンス内の数値の位置を決定したい場合、それを行うための迅速で汚い方法は、シーケンスを最初から繰り返すことです。目標番号が見つかったら停止します。潜在的に、これは、シーケンス全体を2回繰り返して、シーケンス内の2つの数字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 に答える