[Java]Esercizio polimorfismo.
Salve a tutti.
Se eseguo il main "ProvaTraslaCerchio"
verifico che il metodo trasla funziona correttamente.
Non riesco però a visualizzare i valori aggiornati della posizione della figura (Punto p1).
Esiste un modo per utilizzare dal main getX() e getY() della classe punto senza modificare le classi?
Spero di essere stato chiaro.
Grazie in anticipo per l'aiuto.
Se eseguo il main "ProvaTraslaCerchio"
verifico che il metodo trasla funziona correttamente.
Non riesco però a visualizzare i valori aggiornati della posizione della figura (Punto p1).
Esiste un modo per utilizzare dal main getX() e getY() della classe punto senza modificare le classi?
Spero di essere stato chiaro.
Grazie in anticipo per l'aiuto.
public class ProvaTraslaCerchio { public static void main(String[] args) { Punto p1 = new Punto(-1, 3); Forma c1 = new Cerchio(p1, 4, "blu"); System.out.println(c1.toString()); System.out.print(p1.getX() + ", "); System.out.println(p1.getY()); c1.trasla(3, 2); System.out.println(c1.toString()); System.out.print(p1.getX());//visualizza -1 e non 2 come vorrei… System.out.print(p1.getY());//visualizza 3 e non 5 come vorrei… } } public class Punto { private int x, y; public Punto (int x, int y) { this.x = x; this.y = y; } public void setX (int x) { this.x = x; } public void setY (int y) { this.y = y; } public int getX() { return this.x; } public int getY (){ return this.y; } } public interface Forma { void trasla(int x, int y); } public Cerchio (Punto centro, int raggio, String colore) { this.raggio = raggio; this.centro = new Punto(centro.getX(), centro.getY()); this.colore = colore; } public void trasla(int x, int y) { this.centro.setX(this.centro.getX() + x); this.centro.setY(this.centro.getY() + y); } public String toString() { String s; s = "Cerchio: centro =(" +this.centro.getX() +"," +this.centro.getY() +"), raggio=" + this.raggio +" colore="+ this.colore; return s; } }
Risposte
Non linkare il codice, inseriscilo direttamente nel testo usando il tag code. In questo modo non dobbiamo scaricarci il file zip e metterci a cercare a quale punto del codice ti stai riferendo..
Scuami l'ignoranza...cos'è il tag code?
Ho inserito tutti i file legati tra loro poichè immaginavo che fosse incomprensibile individuare il problema inserendo solo alcune righe di codice avulse dal contesto...
Ho inserito tutti i file legati tra loro poichè immaginavo che fosse incomprensibile individuare il problema inserendo solo alcune righe di codice avulse dal contesto...
"nonemaitroppotardi":
Esiste un modo per utilizzare dal main getX() e getY() della classe punto senza modificare le classi?
Leggendo qua e la mi è parso di capire che dovrei modificare la variabile Punto senza crearne una nuova...
Ma come si fa???
credo che il problema sia
credo che in questo modo tu non stia veramente modificando l'istanza di Punto contenuta in Cerchio. Prova invece a fare
così facendo stai creando un nuovo Punto che quindi andrà a rimpiazzare il vecchio centro. Se funziona puoi provare a togliere quelle variabili asc ed ord e fare tutto in una riga
però c'è il rischio che faccia casini a leggere e scrivere contemporaneamente da centro. Con asc ed ord invece prima leggi da centro e poi lo sostituisci quindi non dovrebbero esserci problemi.
public void trasla(int x, int y) { this.centro.setX(this.centro.getX() + x); this.centro.setY(this.centro.getY() + y); }
credo che in questo modo tu non stia veramente modificando l'istanza di Punto contenuta in Cerchio. Prova invece a fare
public void trasla(int x, int y) { int asc = centro.getX(); int ord = centro.getY(); this.centro = new Punto(x + asc, y + ord); }
così facendo stai creando un nuovo Punto che quindi andrà a rimpiazzare il vecchio centro. Se funziona puoi provare a togliere quelle variabili asc ed ord e fare tutto in una riga
this.centro = new Punto(x + centro.getX(), y + centro.getY());
però c'è il rischio che faccia casini a leggere e scrivere contemporaneamente da centro. Con asc ed ord invece prima leggi da centro e poi lo sostituisci quindi non dovrebbero esserci problemi.
Scusa nonemaitroppotardi, non mi ero accorto che avevi modificato il post iniziale e mi ero dimenticato di questa discussione. Il problema è l'esatto contrario di quello esposto da poll89. Il problema è che quando crei la tua istanza della classe Cerchio crei anche un nuovo Punto da usare come centro invece di riutilizzare l'istanza della classe Punto che le viene passata. La soluzione è quella di cambiare il costruttore della classe nel seguente modo:
public Cerchio(Punto centro, int raggio, String colore) { this.raggio = raggio; this.centro = centro; this.colore = colore; }