Newsgroup: it.comp.java
Titolo: Java problema controllo diagonale

Ragazzi vi chiedo un piccolissimo aiuto....
Ho un array bidimensionale 8x8(8 Righe e 8 Colonne).
Le righe e le colonne dell'array vengono selezionate in modo casuale.
Io devo controllare le caselle in diagonale.
Vi spiego meglio.
Ipotizziamo che casualmente venga seleziona la casella 3,3 
(riga=3;colonna=3).Come faccio a fare un ciclo che controlli le 
posizioni diagonali di questa casella, quindi 
(Riga=1,Colonna=1;Riga=2,Colonna=2;Riga=4,Colonna=4;Riga=5,Colonna=5;Riga=6,Colonna=6;Riga=7,Colonna=7;Riga=8,Colonna=8)???
Spero di essermi spiegato.
In attesa di un vostro aiuto.
Saluti
Pancu

 (Riga=1,Colonna=1;Riga=2,Colonna=2;Riga=4,Colonna=4;Riga=5,Colonna=5;Riga=6,Colonna=6;Riga=7,Colonna=7;Riga=8,Colonna=8)??? 
Ad occhio (non ho provato la soluzione che sto per dirti) se 
nell'elemento selezionato riga >= colonna, la colonna di partenza sarà 
sempre 1. La riga iniziale sarà:
riga_dell'elemento - ( colonna dell'elemento - 1 )
Se invece selezioni un elemento con colonna > riga, la riga di partenza 
sarà 1, e la colonna la calcolerai come:
colonna_dell'elemento - (riga_dell'elemento - 1 )
es.
se selezioni (3,3) la casella di partenza sarà colonna 1.
E la riga di partenza sarà 3 - ( 3 - 1) cioè 1. Quindi 1,1.
es.
selezioni l'elemento 5,6.
Si parte dalla rigaa 1. La riga di partenza sarà 6 - (5 - 1) cioè 2.
Quindi (1,2).
Poi nel ciclo fai la scansione di tutte le colonne a partire da quella 
riga, incrementando entrambe di 1 ad ogni ciclo. Ovviamente controllando 
di non andare fuori dai limiti dell'array (ma questo è facile includerlo 
nel codice del ciclo).
Se l'array si chiama randomArray e tu sai già che è 8x8, io farei così:
...
/* Seleziono l'elemento casuale, lo vedo come una coppia di interi 
(riga,colonna) compresi tra 0 e 7 */
...
if (riga >= colonna){
    int rigaIniziale = riga - ( colonna - 1);
    int colonnaIniziale = 1;
    for (int i=rigaIniziale; i<8; i++){
       randomArray[i][colonnaIniziale] = ... //Qui fai ciò che devi
       colonnaIniziale++;
    }
}
else {
    int rigaIniziale = 1;
    int colonnaIniziale = colonna - ( riga - 1);
    for (int i=colonnaIniziale; i<8; i++){
       randomArray[rigaIniziale][i] = ... //Qui fai ciò che devi
       rigaIniziale++;
    }
}
Spero che funzioni (come ti ho detto non l'ho provato) e di esserti 
stato d'aiuto.
ciao

 Io devo controllare le caselle in diagonale.
Poniamo sia scelta una casella alla posizione (x, y) (riga, colonna).
Le prime due caselle sulla "diagonale" saranno una riga "sopra" e una
colonna "a sinistra" e una riga "sotto" e una colonna "a destra".
Cioe' (x-1, y-1) e (x+1, y+1).
A loro volta le caselle in diagonale a queste due saranno (x-2, y-2) e
(x, y) per la prima e (x, y) e (x+2, y+2) per la seconda.
Se quindi avevi pensato ad un bel algoritmo ricorsivo semplice-semplice,
dovrai fare in modo che una casella non venga controllata piu' volte
(Nell'esempio sopra, la casella (x, y)), sempre che ti interessi la
performance :)
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !


(Riga=1,Colonna=1;Riga=2,Colonna=2;Riga=4,Colonna=4;Riga=5,Colonna=5;Riga=6,Colonna=6;Riga=7,Colonna=7;Riga=8,Colonna=8)???
Basta percorrere la matrice in avanti (aggiungendo successivamente 1 alla
riga e 1 alla colonna) e indietro (sottraendo successivamente 1 alla riga e
1 alla colonna), controllando che la riga e la colonna (andando indietro)
non siano inferiori a 1 e che la riga e la colonna (andando avanti) non
siano superiori all'ultima riga o ultima colonna.
Ciao,
 Fabrizio
=== 
http://www.negusweb.it
 ===