Esse seu último código DEVE ter algum problema, olha só: eu quero uma variável pra determinar em qual "Porta" estou mexendo. Essa variável é "portas" (minúsculo e no plural).
portas[0];
portas[1];
etc.
Talvez você quizesse dizer algo como:
public class Casa {
private Porta[] portas;
public Casa(int qtdPortas) { // construtor
portas[qtdPortas] = new Porta;
}
public static void main (String args[]) {
Casa c = new Casa(5); // tem 5 portas
}
}
Certo ou errado, isso está um pouco complicado demais pra mim, por enquanto. Vamos ao teste que eu deveria ter feito antes de responder.
minha classe Casa, agora, está assim:
class Casa{
String cor;
Porta[] portas = new Porta[3];
public Casa(){
for (int i=0; i<3; i++){
portas[i]=new Porta();
}
}
void pinta(String s){
if (this.cor==s){
System.out.println("cor igual");
}
else{
this.cor=s;
System.out.println("nova cor:"+s);
}
}
void portasAbertas(){
int j = 0;
for (int i=0; i<3; i++){
portas[i]=new Porta();
j=(portas[i].aberta==true) ? j+1 : j;
}
System.out.println("portas abertas: "+j);
}
void mostra(){
// System.out.println("cor da casa: "+cor+"\n cor da porta1: "+portas[0].cor+"\n cor da porta2: "+portas[1].cor+"\n cor da porta3: "+portas[2].cor);
System.out.println("cor da casa: "+cor);
for (int i=0; i<3; i++){
System.out.println("cor da porta "+(i+1)+": "+portas[i].cor);
}
}
}
Ela compila, numa boa, e a chamada dos métodos dela rodam direitinho. Mas ao chamar os métodos da classe Porta, o comportamento é estranho. Deixa eu colar a classe Porta, aqui, pra explicar melhor:
class Porta{
boolean aberta;
String cor;
double largura;
double altura;
double espessura;
void abre(){
aberta=true;
}
void fecha(){
aberta=false;
}
void pinta(String s){
if (this.cor==s){
System.out.println("cor igual");
}
else{
cor=s;
System.out.println("nova cor: "+s);
}
}
}
Finalmente, o TestaCasa:
class TestaCasa{
public static void main(String[] args){
Casa minhaCasa=new Casa();
minhaCasa.cor="amarelo";
minhaCasa.portas[0].cor="verde";
minhaCasa.portas[1].cor="verde";
minhaCasa.portas[2].cor="verde";
//mostra a situação inicial
System.out.println("situação inicial:");
minhaCasa.mostra();
minhaCasa.portasAbertas();
//pinta tudo
minhaCasa.portas[0].pinta("vermelho");
minhaCasa.portas[1].pinta("verde");
minhaCasa.portas[2].pinta("azul");
minhaCasa.pinta("cinza");
//abre/fecha algumas portas
minhaCasa.portas[0].abre();
minhaCasa.portas[1].fecha();
minhaCasa.portas[2].abre();
//mostra a situação final
System.out.println("situação final:");
minhaCasa.mostra();
minhaCasa.portasAbertas();
}
}
À primeira vista, ele roda bem e até pinta as portas das cores certas. Mas a porta que é pintada de cor repetida não mostra a string "cor igual", como deveria (mostra "nova cor: verde") e, ao rodar o número de portas abertas, o resultado é zero, nas duas vezes.
Terei errado?