[Java] Matrice rannidata
-
- Prode Principiante
- Messaggi: 136
- Iscrizione: domenica 30 agosto 2015, 18:38
- Desktop: Unity\Mate
- Distribuzione: Ubuntu 15.10
- Sesso: Maschile
[Java] Matrice rannidata
Salve, volevo una mano, vorrei realizzare una "matrice" i cui numeri vadano via via crescendo in questo modo: sono sulla prima riga vado da sn a dx di tot poi ma li (prima riga tutto a dx) vado in basso sempre sulla stessa colonna, poi da in basso a dx torno a sn e poi di nuovo in altro fino alla seconda riga per poi riportarmi a dx, pensavo di usare un array bidimensionale, ma mi blocco, non so come fare dopo la rima riga:per ora è così ma è un semplice aray di array stampato:
public class Matriceconcat {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[][];
int i=0;
a = new int[5][5];
for(int x=0;x<5;x++)
for(int y=0;y<5;y++){
a[x][y]= i++;
if(i==5||i==10||i==15||i==20){
System.out.println();
}
System.out.print(i);
}
}
}
public class Matriceconcat {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[][];
int i=0;
a = new int[5][5];
for(int x=0;x<5;x++)
for(int y=0;y<5;y++){
a[x][y]= i++;
if(i==5||i==10||i==15||i==20){
System.out.println();
}
System.out.print(i);
}
}
}
Ultima modifica di CRIMON il domenica 26 febbraio 2017, 14:49, modificato 2 volte in totale.
- nuzzopippo
- Entusiasta Emergente
- Messaggi: 1627
- Iscrizione: giovedì 12 ottobre 2006, 11:34
Re: [Java] Matrice
Regole piuttosto confuse, quelle esposte, ovviamente stai parlando di array di array, dichiarazione di uno bidimensionale : "int [][] matrice" i cui elementi possono essere individuati tramite due indici indicati riga e colonna, tipo "matrice[1][¹]" per indicare il 2° elemento della seconda riga.
In merito al popolamento della matrice è necessario stabilire univocamente quali sono le regole di composizione prima di poterlo fare, sovente si utilizzano cicli for annidati su tal genere di oggetti, ma dipende dalla logica da applicarsi.
In merito al popolamento della matrice è necessario stabilire univocamente quali sono le regole di composizione prima di poterlo fare, sovente si utilizzano cicli for annidati su tal genere di oggetti, ma dipende dalla logica da applicarsi.
Fatti non foste a viver come bruti ...
- Mdfalcubo
- Moderatore Globale
- Messaggi: 20415
- Iscrizione: venerdì 26 dicembre 2008, 11:17
- Desktop: Solo XFCE
- Distribuzione: Xubuntu 64 bit
- Sesso: Maschile
Re: [Java] Matrice
Per favore metti un titolo più esplicativo. Grazie.
"Il genere umano è stimolante, è la gente che non sopporto,, (Linus - Peanuts)
Re: [Java] Matrice
Ciao, prova a vedere se te ne esci in questo modo: potresti gestire ogni lato con un ciclo for facendo attenzione agli indici che variano dopo ogni for. All esterno dei 4 for ci dovrebbe essere un ciclo (for o while è indifferente) in maniera tale da gestire il numero totale delle operazioni sulla matrice. Buon divertimento.
-
- Prode Principiante
- Messaggi: 136
- Iscrizione: domenica 30 agosto 2015, 18:38
- Desktop: Unity\Mate
- Distribuzione: Ubuntu 15.10
- Sesso: Maschile
Re: [Java] Matrice rannidata
il codice per ora è questo:
public class Matriceconcat {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[][];
int i=0;
a = new int[5][5];
for(int x=0;x<5;x++)
for(int y=0;y<5;y++){
a[x][y]= i++;
if(i==5||i==10||i==15||i==20){
System.out.println();
}
System.out.print(i);
}
}
}
Però non segue la regola del continuare a chiudere il quadrato, non so come fare e in più non so come si esprime la generica i = 5 o multipli in:
if(i==5||i==10||i==15||i==20){
public class Matriceconcat {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[][];
int i=0;
a = new int[5][5];
for(int x=0;x<5;x++)
for(int y=0;y<5;y++){
a[x][y]= i++;
if(i==5||i==10||i==15||i==20){
System.out.println();
}
System.out.print(i);
}
}
}
Però non segue la regola del continuare a chiudere il quadrato, non so come fare e in più non so come si esprime la generica i = 5 o multipli in:
if(i==5||i==10||i==15||i==20){
- nuzzopippo
- Entusiasta Emergente
- Messaggi: 1627
- Iscrizione: giovedì 12 ottobre 2006, 11:34
Re: [Java] Matrice rannidata
Se ho interpretato bene,CRIMON [url=http://forum.ubuntu-it.org/viewtopic.php?p=4961789#p4961789][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Salve, volevo una mano, vorrei realizzare una "matrice" i cui numeri vadano via via crescendo in questo modo: sono sulla prima riga vado da sn a dx di tot poi ma li (prima riga tutto a dx) vado in basso sempre sulla stessa colonna, poi da in basso a dx torno a sn e poi di nuovo in altro fino alla seconda riga per poi riportarmi a dx, pensavo di usare un array bidimensionale, ma mi blocco, non so come fare dopo la rima riga:per ora è così ma è un semplice aray di array stampato:
Non mi sembra sia rispettato l'andamento sinistra => destra => basso => sinistra => alto definito.
L'andamento a destra od a sinistra può essere impostato giocando sulle righe pari o dispari, non è chiaro come dovrebbe agire la procedura quando deve salire; occupa la riga superiore alla prima valutata o cosa?
[Edit] - nel caso abbia interpretato male e la matrice deve solo scendere, è sufficiente definire l'andamento giocando sui numeri di riga pari, tenendo presente che il valore iniziale è zero
Fatti non foste a viver come bruti ...
-
- Prode Principiante
- Messaggi: 136
- Iscrizione: domenica 30 agosto 2015, 18:38
- Desktop: Unity\Mate
- Distribuzione: Ubuntu 15.10
- Sesso: Maschile
Re: [Java] Matrice rannidata
si, putroppo non sono riuscito a farla andare solo sotto, non ho capito come fare e poi farla tornare da li a sn per poi risalire
- nuzzopippo
- Entusiasta Emergente
- Messaggi: 1627
- Iscrizione: giovedì 12 ottobre 2006, 11:34
Re: [Java] Matrice rannidata
Giusto per sfizio, ieri, ho preparato il codice per "solo discesa" basato sul Tuo, Te lo posterò, con spiegazioni, questo pomeriggio, ora non ho disponibile il file, da quella base potrai ripartire per la versione con "Salita", per tale seconda versione Ti suggerisco di leggere la documentazione sugli ArrayList ed escogitare un algoritmo di controllo dello step verticale.CRIMON [url=http://forum.ubuntu-it.org/viewtopic.php?p=4962402#p4962402][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:si, putroppo non sono riuscito a farla andare solo sotto, non ho capito come fare e poi farla tornare da li a sn per poi risalire
Gli esercizi che stai facendo sono istruttivi, a patto che ci si ingegni ad affrontare il problema, certamente suggerimenti ed esempi non guastano ma aiutano poco, è bene esercitarsi ad affrontare i problemi ed a trovare soluzioni.
[Edit] Non necessariamente bisogna usare gli arraylist, gli ho posti essenzialmente per abitudine, anche i vettori multipli dei Tuoi esempi vanno bene, a patto di definire un opportuno utilizzo degli indici di riga.
Ultima modifica di nuzzopippo il lunedì 27 febbraio 2017, 11:25, modificato 1 volta in totale.
Fatti non foste a viver come bruti ...
-
- Prode Principiante
- Messaggi: 136
- Iscrizione: domenica 30 agosto 2015, 18:38
- Desktop: Unity\Mate
- Distribuzione: Ubuntu 15.10
- Sesso: Maschile
Re: [Java] Matrice rannidata
Grazie mille, si so che non ne ricaverei troppo a livello istruttivo è che mi sono bloccato
- nuzzopippo
- Entusiasta Emergente
- Messaggi: 1627
- Iscrizione: giovedì 12 ottobre 2006, 11:34
Re: [Java] Matrice rannidata
Allora, Il Tuo codice ha un errore di base : vuoi stampare subito i dati, ovviamente li stamperesti consecutivamente, dato che i ha un incremento lineare; quello che in realtà vuoi stampare credo sia la matrice, pertanto devi prima crearla.
Ragionando sulla "Sola discesa"
La matrice deve venir popolata in sequenza inversa cambiando riga, la prima riga deve andare da sinistra a destra, la successiva destra => sinistra e così via; un possibile metodo per affrontare il problema è utilizzare l'indice di riga per definire l'andamento, se la riga è pari si va verso sinistra, verso destra se è dispari, puoi deciderlo tramite la divisione con resto dell'indice se "(x % 2) == 0" la riga è pari.
Quando la riga deve andare da destra a sinistra devi, ovviamente, partire dal più alto indice di colonna (4) per giungere allo zero.
Una volta popolata la matrice la stampi.
il codice :
Noterai come assegni la "i" con l'operatore di pre-incremento, così il valore prima incrementato e poi assegnato in modo da avere "1" e non "0" quale primo elemento della matice.
Per altro ho utilizzato un elementare accorgimento di assegnazione spazi per avere una stampa ordinata della matrice, l'ouput del programma su :
Ritengo che Ti sarà facile derivare da Te un ordinamento alternato basso/alto di righe, basta pensarci un attimo, ti lascio nello spoiler un suggerimento per una possibile implementazione da usare se proprio non Ti riesce ma cerca di derivarlo da Te e, magari, leggilo poi (non barare )
Ragionando sulla "Sola discesa"
La matrice deve venir popolata in sequenza inversa cambiando riga, la prima riga deve andare da sinistra a destra, la successiva destra => sinistra e così via; un possibile metodo per affrontare il problema è utilizzare l'indice di riga per definire l'andamento, se la riga è pari si va verso sinistra, verso destra se è dispari, puoi deciderlo tramite la divisione con resto dell'indice se "(x % 2) == 0" la riga è pari.
Quando la riga deve andare da destra a sinistra devi, ovviamente, partire dal più alto indice di colonna (4) per giungere allo zero.
Una volta popolata la matrice la stampi.
il codice :
Codice: Seleziona tutto
public class Matriceconcat {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[][];
int i=0;
a = new int[5][5];
for(int x=0;x<5;x++) {
if ((x % 2) == 0) { // N.B. - la matriee inizia da 0
for(int y=0;y<5;y++){
a[x][y]= ++i;
}
} else {
for(int y=4;y>=0;y--){
a[x][y]= ++i;
}
}
}
for (int x=0; x<5; x++) {
for (int y=0; y<5; y++) {
String tmp = "" + a[x][y];
if (tmp.length() < 3) {
String spazi = "";
for (int j=0; j<(3 - tmp.length()); j++) {
spazi += " ";
}
tmp = spazi + tmp;
}
System.out.print(tmp);
}
System.out.println();
}
}
}
Per altro ho utilizzato un elementare accorgimento di assegnazione spazi per avere una stampa ordinata della matrice, l'ouput del programma su :
Codice: Seleziona tutto
java Matriceconcat
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
Spoiler
Mostra
Parti dalla riga centrale della matrice ed utilizza una variabile per la riga corrente e due variabili pivot per il limite superiore ed inferiore raggiunto, una ulteriore variabile booleana controllerà quale pivot incrementare e rendere riga corrente, il tutto racchiuso in un ciclo che esce solo quando entrambi i pivot saranno ai bordi (sup. ed inf.) della matrice
Fatti non foste a viver come bruti ...
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 11 ospiti