View Full Version : JAVA spostamento array
domanda ho due classi, nella classe a inizializzo un array bidimensionale come faccio nella classe b a prelevare l'array bidimensionale?
io pensavo di creare un metodo getArray nella classe A ma nn riesco a passarlo??
...il problema sembra semplice...potresti postare il tuo codice?...
...ciao...
...il problema sembra semplice...potresti postare il tuo codice?...
...ciao...
Classe Disegno:
//Metodo che mi crea la matrice virtuale
public void creaMatrice(){
for(int y=0; y<matrice.length;y++){
for(int x=0; x<matrice.length;x++){
matrice[x][y] = 0;
}
}
}
//Metodo che mi passa la matrice
public void getMatrice(int[][] matrice){
matrice = int[][] matrice;
return ;
}
classe Cantiere
public void addnave(){
qui dovrei avere la matrice per fare dei controlli
}
...dipende...se la classe Cantiere crea l'oggetto Matrice basterà creare in quest'ultima i metodi di get alla matrice...se sarà una nuova classe a creare Matrice e Cantire semplicemente Cantiere dovrà avere un metodo che accetti in ingresso Matrice...
...ciao...
...dipende...se la classe Cantiere crea l'oggetto Matrice basterà creare in quest'ultima i metodi di get alla matrice...se sarà una nuova classe a creare Matrice e Cantire semplicemente Cantiere dovrà avere un metodo che accetti in ingresso Matrice...
...ciao...
la teoria lo capita il probblema e in pratica.. come faccio il metodo getmatrice
cmq ti do tutta la classe
public class Disegno {
public int[][] matrice;
public Disegno() {
matrice = new int[10][10];
}
//Metodo che mi crea la matrice virtuale
public void creaMatrice(){
for(int y=0; y<matrice.length;y++){
for(int x=0; x<matrice.length;x++){
matrice[x][y] = 0;
}
}
}
//Metodo che mi stampa la matrice virtuale
public void stampaMatrice(){
for(int y=0; y<matrice.length;y++){
for(int x=0; x<matrice.length;x++){
System.out.print(matrice[x][y] + " ");
}
System.out.println("");
}
}
//Metodo che mi passa la matrice
public void getMatrice(int[][] matrice){
matrice = int[][] matrice;
return ;
}
}
la teoria lo capitaSicuro?
1) Concetto di incapsulazione: le variabili di istanza dovrebbero avere un livello di accesso non pubblico (in genere private).
2) creaMatrice() non crea alcuna matrice ... la azzera soltanto.
3) getMatrice() poi è completamente fuori senso ....
Così avrebbe senso:
public int[][] getMatrice () {
return matrice;
}
Ma se fai così, dubito che hai capito il concetto di incapsulazione ....
...ti posto due righe che spero possano farti chiarezza...
...un normale contenitore...un po' di bean e un metodo per pescare e settare le singole stringhe di un bean array di stringhe...
public class Contenitore {
private int intero;
private String stringa;
private String[] stringhe;
/**
* @return Returns the intero.
*/
public int getIntero() {
return intero;
}
/**
* @param intero The intero to set.
*/
public void setIntero(int intero) {
this.intero = intero;
}
/**
* @return Returns the stringa.
*/
public String getStringa() {
return stringa;
}
/**
* @param stringa The stringa to set.
*/
public void setStringa(String stringa) {
this.stringa = stringa;
}
/**
* @return Returns the stringhe.
*/
public String[] getStringhe() {
return stringhe;
}
/**
* @param stringhe The stringhe to set.
*/
public void setStringhe(String[] stringhe) {
this.stringhe = stringhe;
}
/**
* @return Returns the stringhe.
*/
public String getStringa(int i) {
return stringhe[i];
}
/**
* @param stringhe The stringhe to set.
*/
public void setStringa(String stringa,int i) {
this.stringhe[i] = stringa;
}
}
...una classe di controllo...controlla il contenuto dell'array dell'oggetto contenitore...e un metodo che sostituisce l'intero contenuto di un array di stringhe con una stringa predefinita...il primo metodo poteva tranquillamente ricvere in ingresso l'array al posto di prendere l'oggetto contenitore da cui si estrapola l'array...
public class Controllore {
public boolean controlloContenitore(Contenitore contenitore){
boolean risultatoControllo = false;
for(int i=0;i<contenitore.getStringhe().length;i++)
if(contenitore.getStringa(i).indexOf("miao")>-1)
risultatoControllo = true;
return risultatoControllo;
}
public String[] modificaArray(String array[]){
for(int i=0;i<array.length;i++)
array[i] = "miao";
return array;
}
}
...infine il collante di tutta la faccenda...il programma vero e proprio...inizializza gli oggetti che passa poi ai metodi di controllo...
public class Programma {
public Programma(){
Controllore controllore = new Controllore();
Contenitore contenitore = new Contenitore();
String stringhe[] = {"ciao","bau"};
contenitore.setStringhe(stringhe);
boolean risultato;
controllore.modificaArray(contenitore.getStringhe());
risultato = controllore.controlloContenitore(contenitore);
System.out.println(risultato);
}
public static void main(String[] args) {
new Programma();
}
}
...ciao...
Il metodo getMatrice che vuoi dovrebbe essere:
//Metodo che mi passa la matrice
public int[][] getMatrice(){
return matrice;
}
Con questo metodo avresti poi la possibilità di dire, avendo un'istanza della classe disegno che chiameremo ad esempio "dis" (che fantasia che ho):
int[][] m = dis.getMatrice();
il numero di righe della "matrice" m sarebbe:
int numeroRighe = m[0].length;
e il numero di colonne:
int numeroColonne = m.length;
ma è un po' arbitrario, specialmente per una matrice quadrata, soprattutto se fatta con gli array multidimensionali che in Java sono molto multi :D.
...ti posto due righe che spero possano farti chiarezza...
...un normale contenitore...un po' di bean e un metodo per pescare e settare le singole stringhe di un bean array di stringhe...
public class Contenitore {
private int intero;
private String stringa;
...una classe di controllo...controlla il contenuto dell'array dell'oggetto contenitore...e un metodo che sostituisce l'intero contenuto di un array di stringhe con una stringa predefinita...il primo metodo poteva tranquillamente ricvere in ingresso l'array al posto di prendere l'oggetto contenitore da cui si estrapola l'array...
public class Controllore {
public boolean controlloContenitore(Contenitore contenitore){
new Programma();
}
}
...ciao...
thx ho capito piu o meno, vedrò di esercitarmi un'attimo
Il metodo getMatrice che vuoi dovrebbe essere:
//Metodo che mi passa la matrice
public int[][] getMatrice(){
return matrice;
}
Con questo metodo avresti poi la possibilità di dire, avendo un'istanza della classe disegno che chiameremo ad esempio "dis" (che fantasia che ho):
int[][] m = dis.getMatrice();
il numero di righe della "matrice" m sarebbe:
int numeroRighe = m[0].length;
e il numero di colonne:
int numeroColonne = m.length;
ma è un po' arbitrario, specialmente per una matrice quadrata, soprattutto se fatta con gli array multidimensionali che in Java sono molto multi :D.
ma facendo il metodo public int[][] getmatrice() come fa a sapere dove andare a prendere la matrice?
thx ;) a tutti
L'array di int restituito dal metodo getMatrice è l'array di nome "matrice" dichiarato nelle prime righe della classe disegno.
"Si sa" che è quello per via del modo in cui sono risolti i nomi nel linguaggio di programmazione Java. Il compilatore incontra questo metodo:
public int[][] getMatrice() { return matrice; }
e, esaminando il suo corpo, trova il nome "matrice". Scopre che non c'è la dichiarazione di una variabile locale di nome "matrice" nel corpo del metodo nè esiste una siffatta dichiarazione tra i parametri del metodo getMatrice (non ha parametri). A quel punto tenta di ricondurre il nome "matrice" ad una delle variabili dichiarate nell'ambito immediatamente contenete il corpo del metodo. Scopre che esiste la dichiarazione di una variabile di nome matrice, quel:
public int[][] matrice;
in testa alla classe Disegno. Il compilatore collega quindi il nome "matrice" trovato nel corpo del metodo alla variabile "matrice" dichiarata nel corpo della classe disegno. Il risultato è che il metodo getMatrice restituisce il valore del campo "matrice" delle istanze di Disegno.
Era questo che volevi? Cioè volevi che il metodo getMatrice di Disegno restituisse l'array di int dichiarato nelle prime linee di quella classe?
mm cavoli scusate se insisto ma c'è qualcosa che nn mi torna e faccio confusione:
se io ad.es. nella classe 1
o due variabili int, e con queste due variabili (x,y) devo agire su un array int[][] che risiede nella classe 2:
-creo un metodo getarray in classe 2/ e un metodo set
-nella classe uno chiedo un getArray(classe 2) e poi faccio un setArray(classe2)
è corretto il ragionamento?
Devi adottare un approccio più umano altrimenti il linguaggio Java non ti servirà bene quanto potrebbe.
Ciò premesso, per agire intendi dire che vuoi modificare uno dei valori immagazzinati nell'array di interi?
Devi adottare un approccio più umano altrimenti il linguaggio Java non ti servirà bene quanto potrebbe.
Ciò premesso, per agire intendi dire che vuoi modificare uno dei valori immagazzinati nell'array di interi?
si, e che nn voglio avere dieci mila variaili uguali con doversi nomi da mettere in giro xche se nnn nn capisco piu nulla,
volevo tenere la matrice in una classe e se ne avevo bisogno la cambiavo dove mi serviva
:DD:
si, e che nn voglio avere dieci mila variaili uguali con doversi nomi da mettere in giro xche se nnn nn capisco piu nulla,
volevo tenere la matrice in una classe e se ne avevo bisogno la cambiavo dove mi serviva
:DD:
Io ti consiglierei di mantenere "privato" alla classe che contiene effettivamente la matrice l'accesso diretto ad essa: piuttosto, potresti implementari dei metodi che settino/recuperino un valore di una singola cella della matrice, per esempio così:
public void setCellValue(int rowNumber, int colNumber, int value) {
matrice[rowNumber, colNumber] = value;
}
public int getCellValue(int rowNumber, int colNumber) {
return matrice[rowNumber, colNumber];
}
Magari puoi aggiungere dei controlli per verificare se la matrice è nulla o se gli indici sono "non validi" prima di effettuare delle operazioni.
Allora la questione è un pelo diversa. Più che un metodo di accesso (getMatrice) al campo (public int[][] matrice) di un'istanza (x = new Disegno()) forse cerchi un sistema per far sì che ogni tuo oggetto possa accedere ad una stessa "cosa" senza doversi potar dietro uno specifico riferimento a quella cosa.
Per fare un esempio è come essere in cinque in una stanza ed immagine che ognuno dei cinque voglia poter dire qualcosa ad uno degli altri senza doverlo cercare al telefono.
Si tratta di una necessità tutt'altro che assurda.
La soluzione a questo problema è ovvia quanto ovvio è il rilievo che ogni entità frutto di un'unica percezione condivide con le altre proprio l'unicità della percezione da cui derivano.
Detto altrimenti, se osservo un fenomeno fatto di cinque persone in una stanza la prima banalità che posso dire è che quei cinque esistono tutti in uno stesso contesto, condividono lo stesso ambiente, sono il frutto di un'unica percezione.
L'esistenza in un unico contesto è ciò che consente a quelle persone di interagire.
Passando dalle chiacchiere ai fatti, la comune esistenza in un unico contesto può essere rapidamente espressa dalla definizione di una categoria di oggetti la cui caratteristica saliente sia la condivisione di un contesto. La maggior parte di queste definizioni sono ricorsive.
public interface Entity {
Entity getContext();
}
Sulla base di questa dichiarazione puoi creare un'entità "ambiente" (la stanza in cui esistono le cinque persone del nostro esempio):
public class Environment implements Entity {
public Entity getContext() {
return this;
}
}
A questo punto è facile immaginare come possa un Disegno, con la sua matrice, appartenere al sistema.
public class Disegno implements Entity {
private Environment context;
private int righe;
private int colonne;
private int[][] matrice = new int[righe][colonne];
public Disegno(Environment context) {
this.context = context;
}
public int[][] getMatrice() {
return matrice;
}
public Environment getContext() {
return context;
}
}
L'inserimento del disegno nel contesto, cioè la dichiarazione che Disegno esiste e condivide con altri oggetti l'essere frutto di un'unica percezione, può essere staticamente determinato modificando il contesto in:
public class Environment implements Entity {
private Disegno disegno = new Disegno(this);
public Disegno getDisegno() {
return disegno;
}
public Entity getContext() {
return this;
}
}
Si noti come "ambiente", Environment, dipenda dall'esistenza di ogni altro elemento del sistema. Tale dipendenza è non già un difetto di fabbrica ma la dichiarazione che ambiente rappresenta non ogni possibile contesto ma uno ed uno solo tra i possibili: quello che racchiude in sè l'insieme di entità che sono state percepite e che si vuole rappresentare.
Chissenefrega, mi dirai. Se la tua intenzione era quella di avere un riferimento "globale" a Disegno e tramite disegno alla sua matrice (anche se credo che nel fenomeno che intendi rappresentare Disegno coincida con matrice) allora il gioco è fatto. Qualsiasi elemento esistente nello stesso contesto di disegno che esprima tale fatto tramite la condivisione dello stesso ambiente può accedere a Disegno tramite questa semplice comune esistenza.
public class Terzo implements Entity {
private Environment context;
public Terzo(Environment context) {
this.context = context;
}
public void eseguiOperazione() {
int[][] matrice = getContext().getDisegno().getMatrice();
}
public Environment getContext() {
return context;
}
}
In aderenza all'idea di entità che esistono in un ambiente comune procediamo poi alla dichiarazione di un Terzo in Environment.
public class Environment implements Entity {
private Disegno disegno = new Disegno(this);
private Terzo terzo = new Terzo(this);
public Terzo getTerzo() {
return terzo;
}
public Disegno getDisegno() {
return disegno;
}
public Entity getContext() {
return this;
}
}
Tutti i sistemi orientati agli oggetti mutuano la struttura riassunta nelle tre righe di codice di Entity. Solitamente la cosa è implicita ed esistono più contesti, più ambienti, alcuni dei quali sono entità di altri.
Ti ho perso per strada? :D.
spiegazione eccellente, farò sapere :D
Thx ;)
che link condigliate per guide java in ita?
che link condigliate per guide java in ita?
Prova quella in firma ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.