[quote=esdmorais]
Se declarar o objeto sem instanciá-lo, ele será do tipo null[/quote]
É…
Não.
Se declarar o objeto sem instanciá-lo, ele ainda será um objeto do tipo declarado, porém, terá valor nulo.
Sendo assim, se for feita alguma chamada a algum método desse objeto, a JVM lançará uma NullPointerException na linha da chamada.
Parabéns, leu o post com as dicas e aplicou, isso é muito bom!
Ah, sim, quanto a este método…
[b][i][u][color=red] [/color]// Estou com dúvida neste método também[/b][/i][/u]
public void abrePorta(int escolher){
escolher = this.porta1 || porta2 || porta3;
}
Se você está usando Swing, pode usar uma JOptionPane e perguntar ao usuário qual porta. Senão, escreva no console e capture a resposta com a classe Scanner
[b][i][u][color=red] [/color]// Estou com dúvida neste método também[/b][/i][/u]
public void abrePorta(int escolher){
String escolha = javax.swing.JOptionPane.showInputDialog("Qual porta? (1) Porta 1 | (2) Porta 2 | (3) Porta 3");
int portaSel = Integer.parseInt(escolha);
if(portaSel == 1){
escolher = this.porta1;
}else if(portaSel == 2){
escolher = this.porta2;
}else if(portaSel == 3){
escolher = this.porta3;
}
}
Ricardo Passinho
Acho que depende muito do que vai fazer.
Se for necessário que ele seja instanciado somente uma vez, não vejo problema.
Caso esse objeto faça parte de uma iteração em alguma lista ou algo parecido, ai sim teria que ser instanciado a cada passo do laço.
Obrigada pelas dicas galera, já arrumei o tópico :lol:
Acredito que também não me expressei direito!!
Bom o que eu quero é uma dica de como eu posso fazer a classe Porta, ser uma variável da classe Casa?
Isto é, caso seja realmente possível fazer isso neh!!
Minha pergunta vem pois estou lendo a apostila da Caelum para aprender um pouco de Java, pq sou mt ruim em programar :oops: e me deparei em uma situação que isso se tornou necessário e um pouco urgente, mas enfim.
Se puderem me ajudar de alguma forma ou souberem de algum site que fale sobre isso eu agradeço .
drsmachado, utilizei o método que vc passou, porém apareceu o problema que eu estou com dúvida.
Comentei nas linhas abaixo:
[code]package Porta;
import javax.swing.*;
public class Casa{
String cor;
boolean aberta;
Porta porta1 = new Porta ();
Porta porta2 = new Porta ();
Porta porta3 = new Porta ();
public void pintaCasa (String s){
s = this.cor;
}
public void abrePorta(int escolher)
{
String escolha = javax.swing.JOptionPane.showInputDialog("Qual porta? (1) Porta 1 | (2) Porta 2 | (3) Porta 3");
int portaSel = Integer.parseInt(escolha);
if(portaSel == 1){
//esta linha está dando erro Type mismatch: cannot convert from Porta to int
escolher = this.porta1;
}else if(portaSel == 2)
{
//esta linha está dando erro Type mismatch: cannot convert from Porta to int
escolher = this.porta2;
}else if(portaSel == 3){
//esta linha está dando erro Type mismatch: cannot convert from Porta to int
escolher = this.porta3;
}
}
public String toString (){
return "Cor Casa: " + cor + "\n\nPorta 1: " + porta1 + "\nPorta 2: "
+ porta2 + "\nPorta 3: " + porta3;
}
//esta linha está dando erro Type mismatch: cannot convert from Porta to int
escolher = this.porta1;
Você está tentando atribuir o valor de uma Porta numa variavel do tipo int.
Tente usar uma estrutura Switch Case, vai simplificar muito seu trabalho:
public void abrePorta()
{
int escolha = Integer.parseInt(JOptionPane.showInputDialog(null, "Qual porta? (1) Porta 1 | (2) Porta 2 | (3) Porta 3"));
switch(escolha){
case 1:
porta1.abrir();
break;
case 2:
[..]//e assim por diante
default:
break;
}
}
O método main deve ser utilizado para criar uma instância, digamos, iniciar o aplicativo.
Todo o resto deverá ser feito em outros métodos.
Ou seja, Você pode criar um método “initApp();” assim
public static void main(String[] args){
Casa c = new Casa();
c.initApp();
}
public void initApp(){
Porta porta1 = new Porta();
this.cor = "Rosa";
this.abrePorta(porta1);
//demais lógicas
}