2016-01-22 5 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のこの種のものは、2つのフィールドを持つクラスとして実装されます。したがって、あなたのアプリケーションとあなたが現在持っているクラスについてもう少し詳しくお聞かせください。 – Kidburla

答えて

7

Javaはタプルのためのビルトインサポートしていないが、良いニュースは、あなたが戻り値を除いて、このアルゴリズムを実装するためにタプルを使用する必要がないことです。 2つの通常の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; 

戻り値は2つの値を返す必要があるため、ややこしいです。 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

複数の値を格納して返すために、配列またはクラスインスタンスを使用できます。例えば。

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

である
(q,r)

return qrTuple; 
関連する問題