2012-05-28 20 views
0

我想用Java創建自己的數字範圍,並且仍然能夠使用正常的數字。我似乎無法解決它!這是沒有硬編碼每個結果。如何在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, 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的對面)

比方說,我如果A = 4和B = 6,結果將是10,而不是8.

但是如果我想看看哪個假設A = 8和B = 10,id會告訴我A較高,如在tni範圍內,8在10之後。

這可能嗎?

+6

不知道別人,但我什麼都不懂。 –

+1

不,這是不可能的。你必須創建你自己的類並通過這個類的方法來完成所有的數學和轉換,你不能重載+運算符或者投射。 –

+0

好的。傷心,但是,謝謝,然後生病吧,以艱難的方式... ... thx爲你的時間,如果沒有其他人告訴我你錯了(我不,你不是,但我希望。 .. :)) – JavaApprentis

回答

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

是的,這是一個相當不雅的解決方案,但它似乎是你有一個不雅問題擺在首位。

+0

這是一個很好的答案 - 它讓我想起了一個類似的問題,從「編程珠璣」,驚訝,我沒想到它。這是比我自己的解決方案快得多的解決方案,但需要對與索引對應的數組進行額外的「設置」步驟。您可能還有一個數字問題,這些數字在具有「特殊值」的序列中根本不存在,例如「-1」,因此它總是被標記爲「在」序列中的*爲*的任何數字「之前」 。它確實取決於確切的問題定義,這並不明確。 – Jon

+0

是的, 這就是我所說的硬編碼。那麼,它會工作。謝謝:) 至於它是什麼。 這是對一個細胞自動機工程(見Conways遊戲人生,或蘭頓循環的一些例子) 在這個自動機,有不同類型的細胞,每個根據自己的環境和自身的價值兩者定義的值。 程序的每個循環,一個單元格將向所有方面尋找,找出它將具有最佳值的位置。 現在,最佳值如tni數組中所示。 多數情況下越高越好,但有一些黃金數字, – JavaApprentis

+0

被放置高於其實際的數字位置。 這些金色數字是1,2,3,4,6,8,12,16,24,32 ......等等。 希望這可以讓我們看清楚它的用途。 – JavaApprentis

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