2016-05-15 38 views
-6

我得到了一個代碼,但它是C++,我不知道。 但我認爲在C++和Java之間有很多相似之處。 唯一的東西,我不知道他們是什麼意思/如何把它們寫在Java中有這些:C++代碼到Java,幾個問題

u = getNextUglyNumber(twoQ, threeQ, fiveQ, &q); //and what is &q, the &? 

twoQ.push(u << 1); //what is << ? 

std::cout << u << ' '; //this i dont understand at all 

*q = 2; // same as q = 2*q? 

if (fiveQ.front() < u) { 
     u = fiveQ.front(); //whats front? 

非常感謝您的任何形式的幫助!

這裏也是全碼:

typedef std::queue<int> Queue; 
int findNthUglyNumber(int n) { 
    Queue twoQ, threeQ, fiveQ; 
    twoQ.push(2); 
    threeQ.push(3); 
    fiveQ.push(5); 
    int u, q; 
    while (n) { 
     u = getNextUglyNumber(twoQ, threeQ, fiveQ, &q); 
     switch (q) { 
     case 2: 
      twoQ.push(u << 1);   /// u * 2 
     case 3: 
      threeQ.push(u << 2 - u);  /// u * 3 
     case 5: 
      fiveQ.push(u << 2 + u);  /// u * 5 
     } 
     n--; 
     std::cout << u << ' '; 
    } 
    return u; 
} 

int getNextUglyNumber(Queue &twoQ, Queue &threeQ, Queue &fiveQ, int &q) { 
    int u = twoQ.front(); 
    *q = 2; 
    if (threeQ.front() < u) { 
     u = threeQ.front(); 
     *q = 3; 
    } 
    if (fiveQ.front() < u) { 
     u = fiveQ.front(); 
     *q = 5; 
    } 
    switch (*q) { 
    case 2: 
     twoQ.pop(); 
     break; 
    case 3: 
     threeQ.pop(); 
     break; 
    case 5: 
     fiveQ.pop(); 
     break; 
    } 
    return u; 
} 
+3

「C++和Java之間有許多相似之處」,不要因兩者看起來相似的東西而誤導。事實上他們是非常不同的。 – user463035818

+6

*但在我看來,C++和Java之間有許多相似之處。* - 這樣的看法導致C++程序看起來絕對怪異,有bug,效率低下,泄漏內存等等。 – PaulMcKenzie

+2

我會推薦一些C++像[this one]這樣的教程(http://www.cplusplus.com/doc/tutorial/)(你可以專門查看你不知道/理解的東西)。 – Turing85

回答

1

第一<<是左移位運算符,其是在C++相同的和Java。

2 << 5裝置2左移5倍,並且是等於32

std::cout << u << ' '第二<<是C++流插入操作,以及用於寫變量和常量到流。在這裏,它等同於Java代碼:

System.out.print(u); 
System.out.print(' '); 

在C++ std::queuepushfrontpop操作項目添加到隊列的末尾,看(但不刪除)在項目隊列的前面,分別移除並返回隊列前面的項目。它們映射到在Java Queue操作如下:

Queue<Integer> fiveQ = new LinkedList<>(); 
fiveQ.add(5); // fiveQ.push(5); in C++ 
fiveQ.peek(); // fiveQ.front(); in C++ 
fiveQ.remove(); // fiveQ.pop(); in C++ 

約翻譯這對C++最棘手的部分是&q和代碼(其不似乎是正確的*q一部分;我無法與克編譯它++ 5.3.0)。

在C++中有指針和引用。您可以傳遞變量的地址,並通過該地址讀取或修改它。具有&的正式函數參數是參考文獻;表達式&q正在取q變量的地址。表達式*q正在通過該地址讀取並修改q。你可以在Java中使用AtomicInteger,或者寫一個MutableInt類:

public class MutableInt { 
    private int value = 0; 

    public int get() { 
     return value; 
    } 

    public void set(int value) { 
     this.value = value; 
    } 

    @Override 
    public String toString() { 
     return String.valueOf(value); 
    } 
} 

然後,您可以爲q創建的這個實例,並通過它。然後需要訪問和更新其值的函數可以這樣做。

祝你好運。