2016-01-22 46 views
6

我在教自己的算法,如果我的標題不正確,我很抱歉!我不明白如何在Java中實現它。在我自己學習算法,你如何在java中實現元組?

if x = 0: 
return (q,r) = (0,0) 
(q, r) = divide(⌊x/2⌋, y) 
q=2·q, 
r=2·r 
if x is odd: r=r+1 
if r≥y: r=r−y, q=q+1 
return (q, r) 

我不知道如何在Java中實現以下部分。

(q,r)=(0,0) 
(q,r)=divide(⌊x/2⌋, y) 
return (q,r) 
+0

Java中的這種事情將作爲一個具有兩個字段的類來實現。因此,如果你告訴我們更多關於你的應用程序和你目前正在使用的類的信息,這將有所幫助... – Kidburla

回答

7

儘管Java缺乏內置的元組的支持,好消息是,你不必使用元組來實現這個算法,除了返回值。兩個常規int變量rq會做。

// (q,r)=(0,0) 
int q = 0, r = 0; 
// (q,r)=divide(⌊x/2⌋, y) 
q = (x/2)/y; 
r = (x/2) % y; 

返回有點棘手,因爲你必須返回兩個值。在Java中做的慣用方法是定義一個類:

class QandR { 
    private final int q; 
    private final int r; 
    public QandR(int q, int r) { 
     this.q = q; 
     this.r = r; 
    } 
} 

現在你可以從你的方法返回new QandR(q, r)

+0

如果我想實現第一個返回部分,它會像 return new int [] { q,r} – user3561871

+0

@ user3561871對於私有方法,使用數組代替元組是可行的,但它對於您希望其他人調用的方法缺乏命名類的直覺性。對於私有方法'return new int [] {q,r}'將會做到這一點。 – dasblinkenlight

+0

謝謝!我在算法上發表了我的努力。 :) – user3561871

4

您可以使用數組或類實例來包含並返回多個值。例如。
(q,r)其中兩個qr是類型int

int[] qrTuple = new int[2]; // zero initialized 

class QrTuple { 
    int q, r; 

    QR(int q, int r) { 
     this.q = q; 
     this.r = r; 
    } 
} 

然後

QrTuple qrTuple = new QrTuple(0, 0); 
在這兩種情況下,你可以在一個方法結束做

return qrTuple;