2012-12-04 80 views
0

我已經完成了創建非常快速的nqueens程序的任務。到目前爲止,Bruteforce算法和Backtrack正在工作,但我發現了一個似乎更快的C程序。現在我試圖將它從C轉換爲Java,但是我無法轉換指針,因爲我不瞭解指針發生了什麼。 這些都是必須轉換線:將C指針轉換爲Java

編輯:我已經更新了轉換到就我的理解:

final int[] aStack = new int[MAX_BOARDSIZE * 2]; 
int bitfield; //That's what I've got so far 


//Conversion 1: 
register int* pnStack;  -> int pnStack; 

//Conversion 2: 
pnStack = aStack + 1;  -> pnStack = 1; 

//Conversion 3: 
pnStack = aStack + 1;  -> pnStack = 1; 
*pnStack++ = 0;    -> aStack[pnStack++] = 0; 

//Conversion 4: 
bitfield = *--pnStack;  -> bitfield = aStack[--pnStack]; 

//Conversion 5: 
*pnStack++ = bitfield;  -> aStack[pnStack++] = bitfield; 

//Conversion 7: 
pnStack == aStack   -> pnStack == aStack[0] ??????? 

一種解決方案是不錯,但我會盡量找如果你能解釋我發生了什麼,我自己。指針是我從未真正學過c和C++的原因。

問候, 丹尼斯·菲捨爾

+3

取而代之的指針,使用'int'指數。 – nhahtdh

+0

我已經閱讀過關於這方面的內容,但是我不知道該怎麼做:)。假設pnStack的類型爲int:pnStack = aStack +1;現在在pnStack中保存的結果是什麼? –

+1

不,你想要nIndex = 1來對應pnStack = aStack + 1,當然。 –

回答

2

一個數組裏面,解釋指針就像你使用索引的數組中。

*表示索引當前位置的值。

所以

pnStack = aStack; <-- int pnStack = 0; 
pnStack++;   <-- pnStack++; 
bitfield = *pnStack <-- bitfield = aStack[pnStack]; 
bitfield = *--pnStack <-- bitfield = aStack[--pnStack]; (first decrement index, then retrieve the value) 
+0

因爲它不是一個指針,所以可能不會使用nStack或索引的東西。 –

+0

@NicholasWilson哦,右側是打算成爲Java所以不用擔心指針:-) – SJuan76

+0

這看起來不錯。但是,該應用程序仍然無法正常工作。你能解釋比較(轉換6)的結果嗎? –