marinho77 Posted April 6, 2015 at 12:41 AM Report Share #580832 Posted April 6, 2015 at 12:41 AM (edited) Comecei agora a aprender java pelo que comecei a ler a vossa wiki. No entanto surgiu-me a seguinte duvida : public class Ponto { private int x; private int y; public Ponto(int x, int y) { this.x = x; this.y = y; } public boolean equals(Object obj) { //se é o próprio ponto então são iguais if(this == obj) { return true; } //se não é instância da classe Ponto, nunca podem ser iguais if(!(obj instanceof Ponto)) { return false; } //Se não é o próprio ponto mas é uma instância de ponto //então vamos comparar os valores para ver se são iguais Ponto outro = (Ponto)obj; return this.x = outro.x && this.y = outros.y; } } Nesta redefenição do método equals no ultimo return para que é criado um "outro". No ultimo return em vez de se utilizar "outro.x" não podiamos utilizar obj.x ? Edited April 9, 2015 at 09:35 AM by apocsantos geshi Link to comment Share on other sites More sharing options...
alexandre1985 Posted April 6, 2015 at 02:37 PM Report Share #580847 Posted April 6, 2015 at 02:37 PM Não, não podias. Tens sempre que fazer o casting para Ponto para puder existir as variaveis x e y. Sem esse casting essas variaveis não existem. Tem um erro aí. No ultimo return deve de ser this.x == obj.x && this.y == obj.y http://alexandre1985.github.io Link to comment Share on other sites More sharing options...
marinho77 Posted April 6, 2015 at 02:59 PM Author Report Share #580849 Posted April 6, 2015 at 02:59 PM Não, não podias. Tens sempre que fazer o casting para Ponto para puder existir as variaveis x e y. Sem esse casting essas variaveis não existem. Tem um erro aí. No ultimo return deve de ser this.x == obj.x && this.y == obj.y Mas assim a criação do objecto outro nao era necessária 😕 Link to comment Share on other sites More sharing options...
Localhost Posted April 6, 2015 at 03:41 PM Report Share #580851 Posted April 6, 2015 at 03:41 PM (edited) Acho que ele se enganou. Como ele disse, precisas daquele cast para as variáveis existirem. return ((this.x == outro.x) && (this.y == outro.y)); Edited April 6, 2015 at 03:41 PM by Localhost here since 2009 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 6, 2015 at 03:46 PM Report Share #580853 Posted April 6, 2015 at 03:46 PM Sem esse casting essas variaveis não existem. as variáveis não passam a existir só por cauda de um cast ... Mas assim a criação do objecto outro nao era necessária 😕 tu não estás a criar nenhum objecto, estás a criar uma referência a um outro objecto (que dizes ser do tipo Ponto) IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
marinho77 Posted April 6, 2015 at 05:04 PM Author Report Share #580856 Posted April 6, 2015 at 05:04 PM as variáveis não passam a existir só por cauda de um cast ... tu não estás a criar nenhum objecto, estás a criar uma referência a um outro objecto (que dizes ser do tipo Ponto) Certo, mas para que estou a criar aquela referência aquele objecto se posso simplesmente usar o "obj" ? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 6, 2015 at 05:10 PM Report Share #580858 Posted April 6, 2015 at 05:10 PM Certo, mas para que estou a criar aquela referência aquele objecto se posso simplesmente usar o "obj" ? estas a criar a referência para facilitar o acesso ao parêmetro da classe. somente isso. é obrigatório? não. deves fazer ? sim, para facilitar a leitura. agora a pergunta seria : saberias aceder aos parâmetros recorrer à referência ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
marinho77 Posted April 6, 2015 at 05:16 PM Author Report Share #580860 Posted April 6, 2015 at 05:16 PM estas a criar a referência para facilitar o acesso ao parêmetro da classe. somente isso. é obrigatório? não. deves fazer ? sim, para facilitar a leitura. agora a pergunta seria : saberias aceder aos parâmetros recorrer à referência ? Ah, ok. Do que eu vi até agora eu acho que sim bastava para isso fazer this.x == obj.x && this.y == obj.y Ou, seria de outra forma? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 6, 2015 at 05:25 PM Report Share #580861 Posted April 6, 2015 at 05:25 PM já te disseram que isso dará erro ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Localhost Posted April 6, 2015 at 05:43 PM Report Share #580862 Posted April 6, 2015 at 05:43 PM Estás a querer comparar dois tipos de objetos diferentes. Daí usares o cast antes. here since 2009 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 6, 2015 at 06:00 PM Report Share #580863 Posted April 6, 2015 at 06:00 PM Estás a querer comparar dois tipos de objetos diferentes. Daí usares o cast antes. não o problema não tem nada haver sobre comparação de tipos de dados diferentes a questão é o acesso ao parâmetro x ou o x da classe Ponto IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
marinho77 Posted April 8, 2015 at 05:53 PM Author Report Share #580925 Posted April 8, 2015 at 05:53 PM não o problema não tem nada haver sobre comparação de tipos de dados diferentes a questão é o acesso ao parâmetro x ou o x da classe Ponto Sendo assim não existe maneira de aceder aos parametros sem ser fazendo cast . É assim? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 9, 2015 at 01:08 AM Report Share #580935 Posted April 9, 2015 at 01:08 AM sim 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
marinho77 Posted May 12, 2015 at 12:25 AM Author Report Share #582980 Posted May 12, 2015 at 12:25 AM Surgiu-me agora outra duvida. Porque é que isto Set<Contas> principal = new HashSet<Contas>(); é preferivel de utilizar que isto Set<Contas> principal = new Set<Contas>(); Na prática não vai ser igual ? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted May 12, 2015 at 07:00 AM Report Share #582983 Posted May 12, 2015 at 07:00 AM pior do que ser "preferível", é impossivel compilar o segundo código. Set é um interface que define um comportamento de uma classe, e como tal não podes instânciar uma classe com esse nome, pois não existe. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
marinho77 Posted May 14, 2015 at 12:28 AM Author Report Share #583153 Posted May 14, 2015 at 12:28 AM pior do que ser "preferível", é impossivel compilar o segundo código. Set é um interface que define um comportamento de uma classe, e como tal não podes instânciar uma classe com esse nome, pois não existe. Engano meu. Na segunda parte do codigo queria dizer HashSet<Contas> principal = new HashSet<Contas>(); Link to comment Share on other sites More sharing options...
siul72 Posted May 19, 2015 at 04:07 PM Report Share #583473 Posted May 19, 2015 at 04:07 PM (edited) Engano meu. Na segunda parte do codigo queria dizer HashSet<Contas> principal = new HashSet<Contas>(); marinho77 às vezer é mais facil aprender fazendo do que perguntando! que tal dar uso ao PC para programar esses exemplos e tirar algumas conclusoes? HashSet<Contas> principal = new HashSet<Contas>(); é valido mas como o HappyHippyHippo ja disse e bem Set é um interface, que pode ser instanciado por diversos tipos de Sets, utilizando-o dessa forma estas a tornar o teu codigo mais flexivel. Se tens uma Casa essa casa pode ter dois andares, 10 janelas, uma porta... o que tu quiseres.... Mas se tens um Apartamento , continua a ser uma casa mas sö com um andar... Se tens uma Vivenda com dois pisos e com piscina, continua a ser uma casa.... Pergunta: Qual é a forma comum que podes usar para os objectos em causa? sao todos Casas! No caso dos Sets, o Set é a Casa e o HashSet é um pequeno Apartamento.... .... Edited May 19, 2015 at 04:08 PM by siul72 Link to comment Share on other sites More sharing options...
marinho77 Posted July 3, 2015 at 09:56 AM Author Report Share #585727 Posted July 3, 2015 at 09:56 AM Ao ler sobre interfaces li que não podiam ser instanciadas, no entanto vi a seguinte declaração de código : private IC[] comandos = new IC[6]; em que IC é uma interface Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted July 3, 2015 at 10:08 AM Report Share #585728 Posted July 3, 2015 at 10:08 AM e aonde viste isso ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
marinho77 Posted July 3, 2015 at 10:26 AM Author Report Share #585729 Posted July 3, 2015 at 10:26 AM (edited) Nuns exercicios que estou a praticar. Queres que coloque o código todo aqui ? Edit: Aqui esta interface IC (){ void faz(); void reverte(); } public class controlo (){ private IC[] comandos = new IC[6]; public void carrega(int indice, IC c){ comandos[indice]=c; } public void operador(int indice){ if(comandos[indice]!=null){ comandos[indice].faz; } } } Edited July 3, 2015 at 10:32 AM by marinho77 Link to comment Share on other sites More sharing options...
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