2016-01-22 8 views
6

Mi sto insegnando algoritmi e mi dispiace se il mio titolo non è corretto! Non capisco come implementarlo in Java.Apprendimento di algoritmi su me stesso, come implementare tuple in 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) 

Non so come implementare le seguenti parti in Java.

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

Questo tipo di cosa in Java sarebbe implementato come una classe con due campi. Quindi sarebbe utile se ci parlassi un po 'di più della tua applicazione e delle classi che hai attualmente ... – Kidburla

risposta

7

Anche se Java manca il supporto integrato per le tuple, una buona notizia è che non c'è bisogno di utilizzare tuple per implementare questo algoritmo, tranne che per il valore di ritorno. Verranno eseguite due variabili regolari r e q.

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

ritorno è un po 'complicato, perché si deve restituire due valori. modo idiomatico di farlo in Java è la definizione di una classe:

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

Ora si può tornare new QandR(q, r) dal metodo.

+0

Se volessi implementare il primo per la parte di ritorno sarebbe qualcosa come return new int [] { q, r} – user3561871

+0

@ user3561871 L'utilizzo di una matrice al posto di una tupla è OK per i metodi privati, ma non ha l'intuitività di una classe denominata per i metodi che ci si aspetta che altri chiamino. Per i metodi privati ​​'return new int [] {q, r}' farà il trucco. – dasblinkenlight

+0

Grazie! Ho pubblicato il mio sforzo sull'algoritmo. :) – user3561871

4

È possibile utilizzare una matrice o un'istanza di classe per contenere e restituire più di un valore. Per esempio.
(q,r) dove sia q e r sono di tipo int

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

o

class QrTuple { 
    int q, r; 

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

e poi

QrTuple qrTuple = new QrTuple(0, 0); 

in entrambi i casi si può fare al termine di un metodo:

return qrTuple; 
Problemi correlati