[Java] Stampa Matrice attraverso Metodo Ricorsivo
Salve a tutti. Ho un esercizio che mi chiede di stampare un vettore bidimensionale e dati dei valori preimpostati nel vettore, stampare attrave il contenuto con il metodo ricorsivo, le combinazioni di valori.
Il vettore già riempito è strutturato cosi:
Ed dovrebbe stampare a video un esempio tipo questo:
Ovviamente è un esempio, va bene anche se le combinazioni partono dalla prima colonna, anzichè dalla prima riga.
Questa è la bozza di programma che ho fatto
Il mio problema è che il programma stampa la seguente matrice:
Sò come funzionano i cicli annidati per una matrice, ma non sò come devo inserirla all'interno di un metodo per fare in modo che si comporti come in un metodo interattivo.
Ringrazio chinuque mi sappia aiutare.
Il vettore già riempito è strutturato cosi:
String array[][]={ {"A","B","C"}, {"1","2","3"}, {"XX","YY","ZZ"} };
Ed dovrebbe stampare a video un esempio tipo questo:
A1XXA1YYA1ZZ A2XXA2YYA2ZZ A3XXA2YYA2ZZ B1XXB1YYB1ZZ B2XXB2YYB2ZZ B3XXB3YYB3ZZ C1XXC1YYC1ZZ C2XXC2YYC2ZZ C3XXC3YYC3ZZ
Ovviamente è un esempio, va bene anche se le combinazioni partono dalla prima colonna, anzichè dalla prima riga.
Questa è la bozza di programma che ho fatto
public class ricorsioneArrayMulti{ public static String stampaTabella(String[][] array, int i, int j) { if(i==array.length-1 && j==array.length-1){ return array[i][j]; }else if (j<array.length){ return array[i][j] + stampaTabella(array, i ,j+1); }else{ return stampaTabella(array,i+1,0); } } public static void main(String[] args) { String array[][]={ {"A","B","C"}, {"1","2","3"}, {"XX","YY","ZZ"} }; int i=0, j=0; String result; result=stampaTabella(array,i,j); for(int x=0; x<array.length; x++){ for(int y=0; y<array[i].length; y++){ System.out.println(result); } } } }
Il mio problema è che il programma stampa la seguente matrice:
ABC123XXYYZZ ABC123XXYYZZ ABC123XXYYZZ ABC123XXYYZZ ABC123XXYYZZ ABC123XXYYZZ ABC123XXYYZZ ABC123XXYYZZ ABC123XXYYZZ
Sò come funzionano i cicli annidati per una matrice, ma non sò come devo inserirla all'interno di un metodo per fare in modo che si comporti come in un metodo interattivo.
Ringrazio chinuque mi sappia aiutare.
Risposte
Questo e' un codice che scrive le strighe desiderate.
E' scritto in Python, ma si traduce in Java quasi immediatamente.
Cerca di capire cosa fa e perche'.
Magari ne parliamo.
Nel tuo codice ci sono degli errori ovvi, tipo quei 2 cicli for annidato che
stampano la stessa stringa. Non c'e' dubbio che la stringa non cambia.
Dal codice che hai scritto si intuisce una certa confusione di base,
che di per se non e' un problema, probabilmente sei agli inizi.
Questo e' un esercizio gia' abbastanza complesso e poco intuitivo,
ti suggerisco di partire o ripartire da qualcosa di piu' semplice.
E' scritto in Python, ma si traduce in Java quasi immediatamente.
Cerca di capire cosa fa e perche'.
Magari ne parliamo.
Nel tuo codice ci sono degli errori ovvi, tipo quei 2 cicli for annidato che
stampano la stessa stringa. Non c'e' dubbio che la stringa non cambia.
Dal codice che hai scritto si intuisce una certa confusione di base,
che di per se non e' un problema, probabilmente sei agli inizi.
Questo e' un esercizio gia' abbastanza complesso e poco intuitivo,
ti suggerisco di partire o ripartire da qualcosa di piu' semplice.
M = [ ['A', 'B', 'C'], ['1', '2', '3'], ['XX', 'YY', 'ZZ'] ] def f(str, i, j): if (j == 3): return '' if (i == 3): return str ret = f(str+M[i][j], i+1, 0) ret += f(str, i, j+1) if (i == 2 and j == 0): print(ret) return ret f('', 0, 0)
Prima di tutto ti ringrazio. Si, effettivamente sono all'inizio con i metodi ricorsivi. Ed devo ammettere che ho avuto anche diverse difficoltà a comprenderli, ma diciamo che bene o male sono riuscito a risolvere piccoli programmini che gli implementano.
Per quanto riguarda il problema dei cicli, si effettivamente avevo intuito che mancava qualcosa, il problema era proprio che non riuscivo a capire cosa e come implementarlo xD
Mi studierò il codice che hai riportato. Grazie ancora.
Per quanto riguarda il problema dei cicli, si effettivamente avevo intuito che mancava qualcosa, il problema era proprio che non riuscivo a capire cosa e come implementarlo xD
Mi studierò il codice che hai riportato. Grazie ancora.