Alguem porderia me dizer onde estar o erro desse aplicativo:
Aqui estão as 3 classes:
[code]public class Casa1 {
String cor = "";
int totalDePortas = 0;
Porta porta[];
void pinta(String s){
cor = s;
}
int cont = 0;
int quantasPortasEstaoAbertas(){
for(int x=0; x<porta.length; x++){
if(porta[x].aberta == true){
cont++;
}
else{
return cont;
}
}
return cont;
}
void adicionaPorta(Porta p){
p = new Porta();
}
int totalDePortas(){
for(int x=0; x<porta.length; x++){
if(porta[x] != null){
totalDePortas += 1;
}
else{
return totalDePortas;
}
}
return totalDePortas;
}
}[/code]
public class Porta {
boolean aberta = false;
}
[code]public class Casa1Test {
public static void main(String[] args){
Casa1 c1 = new Casa1();
c1.pinta("Azul");
c1.porta = new Porta[3];
c1.adicionaPorta(c1.porta[0]);
c1.adicionaPorta(c1.porta[1]);
c1.adicionaPorta(c1.porta[2]);
c1.porta[0].aberta = true;
c1.porta[1].aberta = false;
c1.porta[2].aberta = true;
System.out.println("Exitem quantas portas na casa? " + c1.totalDePortas());
System.out.println("Quantas portas estão abertas? " + c1.quantasPortasEstaoAbertas());
}
}[/code]
Aparece esse na execução:
Exception in thread “main” java.lang.NullPointerException
at Casa1Test.main(Casa1Test.java:11)
A linha 11 é esta: c1.porta[0].aberta = true;
isis
Abril 28, 2007, 9:12pm
#2
Basicamente vc cria um espaco em memoria,joga fora e tenta acessar o nada.
Quando vc chega em c1.adicionaPorta(c1.porta[0]); vc aloca um espaço na memória,que funciona,mas somente na função e quando vc sai dela o negócio é ‘jogado fora’.
Quando vc acessa o array pra alterar os valores,porta[x] está como null (endereço inválido,fora dos limites,etc).Por isso NullPointerException: vc não tem uma classe ‘alocada’ pra acessar.
Tenta essas duas variantes, e acompanhe pelo debug do eclipse,comparando com o teu codigo original:
void adicionaPorta() {
for (int i=0;i<3;i++) {
porta[i] = new Porta();
}
}
c1.adicionaPorta();
void adicionaPorta(int i){
porta[i] = new Porta();
}
c1.adicionaPorta(0);
c1.adicionaPorta(1);
c1.adicionaPorta(2);
Mas na questão é pedido que se coloque um método
" void adicionaPorta(Porta p) " com um arg do tipo Porta.
Fiz essas modificações:
[code]public class Casa1Test {
public static void main(String[] args){
Casa1 c1 = new Casa1();
c1.pinta("Azul");
System.out.println("Cor da casa: " + c1.cor);
c1.porta = new Porta[3];
for(int i=0; i<3; i++){
c1.porta[i] = new Porta();
c1.adicionaPorta(c1.porta[i]);
}
System.out.println("Exitem quantas portas na casa? " + c1.totalDePortas());
c1.porta[0].aberta = false;
c1.porta[1].aberta = true;
c1.porta[2].aberta = false;
System.out.println("Quantas portas estão abertas? " + c1.quantasPortasEstaoAbertas());
}
}[/code]
[code]public class Casa1 {
String cor = "";
int totalDePortas = 0;
Porta porta[];
void pinta(String s){
cor = s;
}
int cont = 0;
int quantasPortasEstaoAbertas(){
for(int x=0; x<porta.length; x++){
if(porta[x].aberta == true){
cont = cont + 1;
}
else{
cont = cont;
}
}
return cont;
}
void adicionaPorta(Porta p){
if(p != null){
totalDePortas += 1;
}
}
int totalDePortas(){
return this.totalDePortas;
}
}[/code]
public class Porta {
boolean aberta = false;
}
Será que está certo agora?