Ekate Posted September 20, 2013 at 05:58 PM Report #525380 Posted September 20, 2013 at 05:58 PM (edited) tenho a seguinte classe: public class Circulo implements Cloneable { private Ponto centro; private int raio; public Circulo(int raio, Ponto centro) { this.raio = raio; this.centro = centro; } //gets e sets public void mover (int moveX, int moveY){ centro.setX(centro.getX()+ moveX); centro.setY(centro.getY()+ moveY); } public void redimensionar(int factor){ this.raio *= factor; } @Override public Object clone(){ try{ Circulo c = (Circulo) super.clone(); c.centro = (Ponto) centro.clone(); return c; } catch (CloneNotSupportedException e){ return null; } } @Override public String toString() { return "Circulo{" + "raio = " + this.raio + ", centro = " + this.centro + '}'; } } e portanto quero clonar os valores da classe circulo juntamente os endereços da classe Ponto public class Ponto implements Cloneable{ private int x; private int y; public Ponto(int x, int y) { this.x = x; this.y = y; } // gets e sets @Override public Object clone(){ try { return super.clone(); } catch (CloneNotSupportedException e){ return null; } } @Override public String toString() { return " Ponto{" + "x = " + x + ", y = " + y + '}'; } } na classe main coloquei o seguinte Ponto centro = new Ponto(10, 10); Circulo c1 = new Circulo(5, centro); Circulo c2 = (Circulo) c1.clone(); System.out.println("Circulo 1: " + c1); System.out.println("Circulo 2: " + c2); c1.mover(5, -5); c1.redimensionar(2); System.out.println("Circulo 1: " + c1); System.out.println("Circulo 2: " + c2); mas o output que tenho é este: "Circulo 1: Circulo{raio = 5, centro = Ponto{x = 10, y = 10}} Circulo 2: Circulo{raio = 5, centro = Ponto{x = 10, y = 10}} Circulo 1: Circulo{raio = 10, centro = Ponto{x = 15, y = 5}} Circulo 2: Circulo{raio = 5, centro = Ponto{x = 10, y = 10}}" portanto nao esta a fazer a copia quando altero os dados... nem à variavel "raio" que se encontra na classe Circulo que devia ser a mais facil de aceder.. Edited September 22, 2013 at 01:06 PM by Ekate
HappyHippyHippo Posted September 20, 2013 at 06:05 PM Report #525381 Posted September 20, 2013 at 06:05 PM o tema é diferente, mas a resposta é a mesma : https://www.portugal-a-programar.pt/topic/62496-atualizar-bloco-de-notas-em-pagina-php/?do=findComment?comment=525137 o que é para ti "clonar" ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Rui Carlos Posted September 21, 2013 at 01:07 PM Report #525423 Posted September 21, 2013 at 01:07 PM mas o output que tenho é este: "Circulo 1: Circulo{raio = 5, centro = Ponto{x = 10, y = 10}} Circulo 2: Circulo{raio = 5, centro = Ponto{x = 10, y = 10}} Circulo 1: Circulo{raio = 10, centro = Ponto{x = 15, y = 5}} Circulo 2: Circulo{raio = 5, centro = Ponto{x = 10, y = 10}}" Qual era o output que querias obter? Esse output para mim é o que faz mais sentido. Fizeste uma cópia, e depois alteraste o original. As alterações são visíveis no original, mas não na cópia. Rui Carlos Gonçalves
Ekate Posted September 21, 2013 at 02:02 PM Author Report #525427 Posted September 21, 2013 at 02:02 PM pois talvez a questao seja essa... nao tenha percebido o conceito "clonar"... porque o que esperava/pensava era ao alterar os dados que, neste caso, o circulo 2 fosse tambem alterado.. portanto nao é o que é suposto acontecer? a classe cloneable o que faz é nao deixar copiar os dados?
Rui Carlos Posted September 21, 2013 at 02:05 PM Report #525428 Posted September 21, 2013 at 02:05 PM Se pretendias que c1 e c2 fossem alterados em simultâneo, fazias simplesmente Circulo c2 = c1;. 1 Report Rui Carlos Gonçalves
Ekate Posted September 21, 2013 at 02:46 PM Author Report #525432 Posted September 21, 2013 at 02:46 PM Se pretendias que c1 e c2 fossem alterados em simultâneo, fazias simplesmente Circulo c2 = c1;. pois exatamente... é que o prof colocou essa expressao e assumi que o clone tinha essa mesma funçao.. obrigada aos dois e desculpa pela burrice xD
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now