Instanceof não reconhece nenhuma instância

18 respostas
Z

Eu tenho uma classe Dispositivo que é uma superclasse e as suas subclasses são Diodo, Resistor, Capacitor, Indutor, FonteDeTensao e FonteDeCorrente. Na função leiDasMalhas eu testo os tipos de Dispositivo ramo[][]. Nesse teste que eu fiz não dá certo.

public void leiDasMalhas(){

for(int j=0; j<4; j++){

if(ramo[0][j] instanceof Resistor)

System.out.println(resistor);

if (ramo[0][j] instanceof Diodo)

System.out.println(diodo);

}

}

que instanceof sempre retorna null. O que poderia estar errado??

18 Respostas

nel

Zkizo:
Eu tenho uma classe Dispositivo que é uma superclasse e as suas subclasses são Diodo, Resistor, Capacitor, Indutor, FonteDeTensao e FonteDeCorrente. Na função leiDasMalhas eu testo os tipos de Dispositivo ramo[][]. Nesse teste que eu fiz não dá certo.

public void leiDasMalhas(){

for(int j=0; j<4; j++){

if(ramo[0][j] instanceof Resistor)

System.out.println(resistor);

if (ramo[0][j] instanceof Diodo)

System.out.println(diodo);

}

}

que instanceof sempre retorna null. O que poderia estar errado??

Oi!

Antes de mais nada, sempre poste código usando as tags code, veja a diferença:

public void leiDasMalhas(){
        for(int j=0; j<4; j++){
             if(ramo[0][j] instanceof Resistor)
                 System.out.println("resistor");
             if (ramo[0][j] instanceof Diodo)
                  System.out.println("diodo");
            }
    }

Outro detalhe, é como você está populando a sua matriz (não sei porque é matriz e não um vetor simples) ramo. A questão de estar sempre retornando null, pode ser justamente por estar preenchendo a matriz incorretamente. Poste o seu código completo, fica muito mais simples de ajuda-lo.

Abraços.

Z

Ah! Desculpe...

public Malha(){
               corrente = 0;
               eqLinear = new int[3];
               ramo = new Dispositivo[1][4];
               }
               
    public void getMalha(int a, int b, int c, int d){
             getRamo(a,b,0);
             getRamo(b,c,1);
             getRamo(c,d,2);
             getRamo(d,a,3);         
     }


 void realoqueDispositivo(Dispositivo p, int tipo, int tam){
        int util;

        switch (tipo) {
                   case 1:
                         System.out.println("Declarei um DIODO\n\n");
                         p = new Diodo();
                         break;
                   case 2:
                         System.out.println("Digite o valor da resistencia:");
                         util = input.nextInt();
                         p = new Resistor(util);
                         break;
                   case 3:
                         p = new Indutor();
                         break;                   
                   case 4:
                         p = new Capacitor();
                         break;
                   case 5:
                         p = new FonteDeCorrente();
                         break;                     
                   case 6:
                         p = new FonteDeTensao();
                         break;                   
                         }

    }

 
    public void getRamo(int a, int b, int cont){
        int aux;
        int tam;
     
        System.out.printf("Dispositivos do ponto %d ao ponto %d\n", a, b);
        tam = 0;
        System.out.printf("\tDigite o numero referente ao dispositivo desejado: \n");
        aux = input.nextInt();
        realoqueDispositivo(ramo[0][cont], aux, tam);     
        tam++;
        }

     
}

Pronto! Realmente deve ser a forma de alocar, já que deu o mesmo erro em c++ usando dynamic_cast. Mas eu não vi nada que pudesse estar errado, acho que estou errando no conceito da coisa.

nel

Cara, tens certeza que este é o código completo?
Não vejo a método main, não vejo a declaração da classe, há método sem retorno…

E principalmente, não vejo onde você popula a sua matriz com os devidos dispositivos.
Sinceramente, achei bem confuso o seu código. Poste a sua classe completa, como está no seu arquivo .java.

Quando eu digo isso, poste sua classe mãe e as respectivas classes filhas e também a classe de manipulação da sua matriz.
Poste tudo. Não esqueça, instancie o objeto, popule o mesmo com os respectivos valores e depois o insera na matriz, não precisa ser nessa ordem, pois pode manipular o mesmo via instancia, mas não precisa complicar.

Abraços.

Z
class Malha {
    Scanner input = new Scanner(System.in);
    private int corrente;
    private Dispositivo[][] ramo;
    private int[] eqLinear;
    
    public Malha(){
               corrente = 0;
               eqLinear = new int[3];
               ramo = new Dispositivo[1][4];
               }
               
    public void getMalha(int a, int b, int c, int d){
             getRamo(a,b,0);
             getRamo(b,c,1);
             getRamo(c,d,2);
             getRamo(d,a,3);         
     }
     
     
    void realoqueDispositivo(Dispositivo p, int tipo){
        int util;

        switch (tipo) {
                   case 1:
                         System.out.println("Declarei um DIODO\n");
                         p = new Diodo();
                         break;
                   case 2:
                         System.out.println("Digite o valor da resistencia:");
                         util = input.nextInt();
                         p = new Resistor(util);
                         break;
                   case 3:
                         p = new Indutor();
                         break;                   
                   case 4:
                         p = new Capacitor();
                         break;
                   case 5:
                         p = new FonteDeCorrente();
                         break;                     
                   case 6:
                         p = new FonteDeTensao();
                         break;                   
                         }

    }

 
    public void getRamo(int a, int b, int cont){
        int aux;
     
        System.out.printf("Dispositivos do ponto %d ao ponto %d\n", a, b);
        System.out.printf("\tDigite o numero referente ao dispositivo desejado: \n");
        aux = input.nextInt();
        realoqueDispositivo(ramo[0][cont], aux);     
        }

   public void leiDasMalhas(){
        System.out.println("VAMOS TESTAR");
        for(int j=0; j<4; j++){
             if(ramo[0][j] instanceof Resistor)
                 System.out.println("resistor");
             if (ramo[0][j] instanceof Diodo)
                  System.out.println("diodo");
            }
    }
}
A função leiDasMalhas possui apenas o teste para Diodo ou Resistor.
Z
abstract class Dispositivo {
   protected int corrente;
   protected int tensao;
   protected int malha;
   public Dispositivo() {
       corrente = 0;
       tensao = 0;
       malha = 0;
   }
   public void setDispositivo(){
       
   }
   public void getTensao(){
       
   }
   public void getCorrente(){
       
   }
   public void setMalha(){
       
   }
   public void getMalha(){
       
   }
}



public class Projeto {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Circuito circuito = new Circuito();
  
        circuito.setCircuito();
        circuito.getCircuito();
    }
}

As subclasses não possuem nada implementado além dos construtores.

nel

Zkizo

1 - Cadê o método main (ou seja lá como esteja “ativando” a classe) que cria a instancia da classe Malha (Malha m = new Malha()) ?
2 - Sem uma instância, como pretendes manipular os Dispositivos?
3 - Cadê a parte em que você insere um dispositivo na matriz?

Analise novamente seu código, com calma. Veja uma necessidade de cada veze e ai pense em como implementar.
Está bem confuso, ao menos para mim, seu código. Desculpe, tente refatora-lo e veja como inserir corretamente na matriz.

Abraços.

Z

Tentarei explicar, obrigada pela compreensão.

class Circuito {

    private char[][] circuito;
    private Malha[] malha;
    private int[][] sistemaLinear;
    private int qntMalha;
    public Circuito(){       
                       qntMalha = 2; // impede que o usuário aumente o número de malhas
                       malha = new Malha[2]; // aloca espaço para as malhas;
                       malha[0] = new Malha();
                       malha[1] = new Malha();
                       sistemaLinear = new int[2][3];
                       circuito = new char[5][11];
                       int cont = 0; // variável de ajuda
                       for (int i = 0; i < 5; i++) {
                           for (int j = 0; j < 11; j++) {
                               if (( i==0) || (i==4)) {
                                     if ((j == 0)||(j == 5)||(j == 10)){
                                          circuito[i][j] = (char) (cont+48); // tabela ascii
                                          cont++;
                                          }
                                     else
                                         circuito[i][j] = '-';
                                         }
                               else
                                   if ((j == 0)||(j == 5)||(j == 10))
                                      circuito[i][j] = '|';
                                   else
                                       circuito[i][j] = ' ';
                                       }
                                       }
                       
                       
}
                 
    public void setCircuito(){
     
     for (int i = 0; i < 5; i++) {
         for (int j = 0; j < 11; j++) 
             System.out.printf ("%c", circuito[i][j]);
             System.out.printf ("\n");
         }
     
}

    public void getCircuito(){
     System.out.print ("Preenchendo Malhas: \n\n");
     System.out.print ("Fim - 0\n");
     System.out.print ("Diodo - 1\n");
     System.out.print ("Indutor - 2\n");
     System.out.print ("Resistor - 3\n");
     System.out.print ("Capacitor - 4\n");
     System.out.print ("Fonte de Tensao - 5\n");
     System.out.print ("Fonte de Corrente - 6\n");
     System.out.print ("Malha 1\n");
     malha[0].getMalha(1,2,5,4);
     System.out.print ("Malha 2\n");
     malha[1].getMalha(2,3,6,5);
}

    public void determinantes(int sistemaLinear[][], int corrente1[], int corrente2[]){
    
    
}

    public void resolverSistemaLinear(){
    int[] corrente1, corrente2;
    
    corrente1 = new int[1];
    corrente2 = new int[1];
    
    malha[0].leiDasMalhas();
    malha[1].leiDasMalhas();
    determinantes(sistemaLinear, corrente1, corrente2);
    
}

    
}





class Malha {
    Scanner input = new Scanner(System.in);
    private int corrente;
    private Dispositivo[][] ramo;
    private int[] eqLinear;
    
    public Malha(){
               corrente = 0;
               eqLinear = new int[3];
               ramo = new Dispositivo[1][4];
               }
               
    public void getMalha(int a, int b, int c, int d){
             getRamo(a,b,0);
             getRamo(b,c,1);
             getRamo(c,d,2);
             getRamo(d,a,3);         
     }
     
     
    void realoqueDispositivo(Dispositivo p, int tipo){
        int util;

        switch (tipo) {
                   case 1:
                         System.out.println("Declarei um DIODO\n");
                         p = new Diodo();
                         break;
                   case 2:
                         System.out.println("Digite o valor da resistencia:");
                         util = input.nextInt();
                         p = new Resistor(util);
                         break;
                   case 3:
                         p = new Indutor();
                         break;                   
                   case 4:
                         p = new Capacitor();
                         break;
                   case 5:
                         p = new FonteDeCorrente();
                         break;                     
                   case 6:
                         p = new FonteDeTensao();
                         break;                   
                         }

    }

 
    public void getRamo(int a, int b, int cont){
        int aux;
        int tam;
     
        System.out.printf("Dispositivos do ponto %d ao ponto %d\n", a, b);
        System.out.printf("\tDigite o numero referente ao dispositivo desejado: \n");
        aux = input.nextInt();
        realoqueDispositivo(ramo[0][cont], aux);     
        }

    public void leiDasMalhas(){
System.out.println("VAMOS TESTAR");
        for(int j=0; j<4; j++){
             if(ramo[0][j] instanceof Resistor)
                 System.out.println("resistor");
             if (ramo[0][j] instanceof Diodo)
                  System.out.println("diodo");
            }
    }
}
    




abstract class Dispositivo {
   protected int corrente;
   protected int tensao;
   protected int malha;
   public Dispositivo() {
       corrente = 0;
       tensao = 0;
       malha = 0;
   }
   public void setDispositivo(){
       
   }
   public void getTensao(){
       
   }
   public void getCorrente(){
       
   }
   public void setMalha(){
       
   }
   public void getMalha(){
       
   }
}




public class Main {

    public static void main(String[] args) {
        Circuito circuito = new Circuito();
  
        circuito.setCircuito();
        circuito.getCircuito();
    }
}

Eu tenho uma classe Circuito, que possui duas malhas. Eu tenho o método getCircuito que chama getMalha que chama getRamo. E é nesse getRamo que eu pergunto qual dispositivo a pessoa quer inserir de um ponto a ou b. Nesse esquema:

0----1----2
| | |
| | |
| | |
3----4----5

Note que ai em cima eu tenho duas malhas, cada uma formada por 4 ramos. Eu limitei no programa que cada malha teria só 1 dispositivo, por isso declarei ramo como ramo[1][4]. Na mein eu só chamo setCircuito que inicializa o circuito preenchendo devidamente a malha, que por sua vez inicializa o vetor ramo. E é nesse ramo que há problema, pois ramo é Dipositivo que insere as subclasses de Dispositivo. Pra fazer a função leiDasMalhas eu precisa saber qual dispositivo está em ramo[i][j], porque é a partir dessa informação que eu preencherei eqLinear e por sua vez sistemaLinear.

Muitos métodos não estão implementados, pois estou fazendo por partes.

C

olha, eu estou começando em java, mas pelo que sei, pro ramo retornar TRUE que é uma instância de alguma coisa ele tem que ser um OBJETO.
não achei no seu código nada que indique que o Ramo está recebendo um Diodo por exemplo… o método realoqueDispositivo não deveria retornar o a varíavel “p” para ramo?
mostre como estão as suas classes Diodo, Resistor, etc… mas pelo que deu pra observar, vc não tá instanciando um tipo de dispositivo em ramo e sim a classe abstrata dispositivo

os mais experts me corrijam se eu estiver errado!

nel

caematos:
olha, eu estou começando em java, mas pelo que sei, pro ramo retornar TRUE que é uma instância de alguma coisa ele tem que ser um OBJETO.
não achei no seu código nada que indique que o Ramo está recebendo um Diodo por exemplo… o método realoqueDispositivo não deveria retornar o a varíavel “p” para ramo?
mostre como estão as suas classes Diodo, Resistor, etc… mas pelo que deu pra observar, vc não tá instanciando um tipo de dispositivo em ramo e sim a classe abstrata dispositivo

os mais experts me corrijam se eu estiver errado!

Caematos, na realidade você não precisa que um método necessariamente tenha um retorno, ele pode ser void e você simplesmente manipula uma determinada instância. No caso, eu lhe passo uma instância de um objeto para um método e você, nesse método, manipula esse objeto (instancia) e após a chamado do determinado método, todas as modificações ocorridas nesta instância estarão disponíveis para você.

No caso, ele instancia as classes filhas do dispositivo, o que estaria correto. Como eu disse, o código é que está confuso. Vou tentar analisar com calma e dar uma opinião, apesar que é Domingo e já são 22h rsrs

Abraços.

Z

mas a minha idéia era passar cada elemento do ramo para instanciar lá no realoque. Lá no construtor do circuito eu fiz ramo = new Dispositivo[1][4]. GetMalha iria chamar get Ramo 4 vezes. Se a pessoa só escolhesse a opção 1 (diodo) as chamadas seriam:

realoqueDispositivo(ramo[0][1], 1);
realoqueDispositivo(ramo[0][2], 1);
realoqueDispositivo(ramo[0][3], 1);
realoqueDispositivo(ramo[0][4], 1);

E lá no realoque, como p é uma referência pra ramo, ficaria:

p = new Diodo();
p = new Diodo();
p = new Diodo();
p = new Diodo();

Que podemos pensar que o que aconteceu foi:

ramo[0][0] = new Diodo();
ramo[0][1] = new Diodo();
ramo[0][2] = new Diodo();
ramo[0][3] = new Diodo();

né não?

Quanto ao resistor, capacitor e derivados, eles não tem nada feito ainda. Estou tentando resolver esse erro antes. Mas vou mostrar como está:

class Diodo extends Dispositivo {
    public Diodo(){
        System.out.println("Construtor do DIODO!!");

}

    @Override
    public void getCorrente(){
    
}

    @Override
    public void getTensao(){
    
    }
}

class Capacitor extends Dispositivo {
    public Capacitor(){
        
    }
    @Override
    public void getCorrente(){
        
    }
    @Override
    public void getTensao(){
        
    }
    
}


class FonteDeCorrente extends Dispositivo{
   public FonteDeCorrente(){
}

    @Override
    public void getCorrente(){
    
}

    @Override
    public void getTensao(){
    
}

    
}



class FonteDeTensao extends Dispositivo {
    public FonteDeTensao() {
}

    @Override
    public void getCorrente(){
    }

    @Override
    public void getTensao() {
    
}
    
}


class Indutor extends Dispositivo {
    public Indutor(){
}

    @Override
    public void getCorrente(){
    
}

    @Override
    public void getTensao(){
      
}

    
}


class Resistor extends Dispositivo  {
    private int resistencia;
    public Resistor(int resistencia){ //chama construtor da superclasse
                     this.resistencia = resistencia; 
                     }

    public void getResistencia(){
    
}

    @Override
    public void getCorrente(){
    
}

    @Override
    public void getTensao(){
    
}
    
}
nel

Oi!

Só para entender o que eu disse acima:

void someMethod(List<String> someList) {
    someList.add("Banana");
    someList.add("maca");
}

//chama o metodo
List<String> list = new ArrayList<String>();
someMethod(list);
for(String value : list) {
    System.out.println(value);
}

O resultado será:
banana
maca

Pois, passei a instância do Objeto List e a manipulei em meu método, portanto, por referência. Sendo assim, todas as modificações estão acessiveis logo após a execução do método.

Abraços.

nel

Zkizo

Uma pergunta, porque matriz e não vetor? :slight_smile:

Z

Na verdade eu ia fazer um vetor de ponteiros e aumentar dinamicamente. Seria algo como *ramo[4]. Cada elemento seria um vetor de dispositivos, pois a pessoa poderia colocar quantas quiser. Como eu tive parei nesse problema da leiDasMalhas eu fui diminuindo o problema, deixando só um dispositivo, por isso ficou ramo[1][4], haha. Fui diminuindo pra me concentrar nos detalhes menores. Quando eu resolver isso usarei realoque para aumentar os elementos de *ramo[4] o quanto eu quiser. Deu pra pegar o espírito? Eu sei que tá meio confunso, mas estou deixando deixar o mais claro possível. Fui cortanto e substituindo partes só pra eu não ficar com tanta coisa aloca e perder o foco do meu problema.

nel

Oi!

Deixa eu lhe perguntar, com questões de ponteiro e realocação, você está tendo visão de um programador C ou Java? Pois me parece puramente C rs.
Claro, dá para programar Java no formato de estrutura de dados, tanto é, que a Caelum tem apostila demonstrando isso. Mas algo que eu vejo de positivo (entre outros) no Java, é a orientação a objetos. Então lhe pergunto, porque não usa o conceito de OO para essa sua problematica?

E por favor, expresse exatamente a sua necessidade/problematica, para que eu possa entender melhor, assim como outro que queira ajuda-lo.
Não precisas demonstrar nada em código, apenas escreva e seja objetivo, pois o seu código já vimos.

Abraços.

Z

Eu programo em C. Nesse atual projeto eu preciso desenvolver um projeto em POO e achei que um Circuito abordaria de forma interessante a questão do polimorfismo já que um dispositivo poderá agir de diversas formas, pois ele pode ser resistor, diodo, etc. E é exatamente no ponto que eu queria demonstar que eu tô falhando. Eu queria poder, a partir de vários Dispositivos, distingui-los e fazer com que se comportem de determinada forma.

Eu estou desenvolvendo em java E C++ e nas duas essa parte não rola. É como se eu tivesse dando um new utilizando as subclasses e não tivesse realmente agregando ao array de Dispositivos a natureza da subclasse que eu quero, o new está sendo inútil, acho eu. Quando vou acessá-las dá erro de memória. Por isso que o instanceof não reconhece, pois realmente a superclasse não está referenciando uma subclasse! Mas não vejo nada que aponte para o erro. Acho que não tenho a abstração necessária. Estou deixando um pouco de lado todos os comportamentos que os objetos podiam ter porque, se eu não conseguir corrigir esse meu prolema que eu acho que é provocado por má manipulação da memória, não tem muito o que fazer…

Z

Nossa, muito obrigada! Com essas alterações o programa rodou sem problemas. Eu pensei que os dois modos fossem equivalentes, nem pensei que poderia ser isso. Você teria uma explicação para isso? Estou realmente curiosa.

"Rearrumei" minha classe Malha. Agora eu voltei ao que eu tinha proposto fazer, uma matriz dinâmica que representasse os 4 ramos e cada um deles pudesse possuir um número N de dispositivos. Vou colocar aqui minha solução.

Quanto ao instanceof ferir o polimorfismo, você tem toda razão. Não tinha percebido isso... Vou fazer alterações que contribuam melhor nesse ponto. Obrigada. :D

Valeu pessoal.

Scanner input = new Scanner(System.in);
    private int corrente;
    private Dispositivo[][] ramo;
    private int[] eqLinear;
    
    public Malha(){
               corrente = 0;
               eqLinear = new int[3];
               ramo = new Dispositivo[4][];
               }
               
    public void getMalha(int a, int b, int c, int d){
             getRamo(a,b,0);
             getRamo(b,c,1);
             getRamo(c,d,2);
             getRamo(d,a,3);         
     }

      public Dispositivo[] realoqueDispositivo(Dispositivo ramo[], int tipo, int tamDesejado, int tamAtual){     
            Dispositivo[] p;  
            
            p = new Dispositivo[tamDesejado];
            if(tamDesejado>=tamAtual){
                for(int i=0;i<tamAtual;i++)
                p[i] = ramo[i];
              }
           else{
                for(int i=0;i<tamDesejado;i++)
                p[i] = ramo[i];
            }
            return p;  
        
        }   

 
    public void getRamo(int a, int b, int cont){
        int aux;
        int tam = 0;
     
        System.out.printf("Dispositivos do ponto %d ao ponto %d\n", a, b);
        do {
        System.out.printf("\tDigite o numero referente ao dispositivo desejado: \n");
        aux = input.nextInt();
        ramo[cont] = realoqueDispositivo(ramo[cont], aux, tam+1, tam);    
        ramo[cont][tam] = getDispositivo(aux); // Após alocar mais espaço em ramo, atribui o novo dispositivo
        tam++;
        } while ( aux != 0);
    }

    
     public Dispositivo getDispositivo(int tipo){     
            Dispositivo p = null;  
            int util;     
        
            switch (tipo) {     
                       case 1:      
                             p = new Diodo();     
                             break;     
                       case 2:     
                             System.out.println("Digite o valor da resistencia:");     
                             util = input.nextInt();     
                             p = new Resistor(util);     
                             break;     
                       case 3:     
                             p = new Indutor();     
                             break;                       
                       case 4:     
                             p = new Capacitor();     
                             break;     
                       case 5:     
                             p = new FonteDeCorrente();     
                             break;                         
                       case 6:     
                             p = new FonteDeTensao();     
                             break;                       
                             }     
            return p;  
        
        } 
        
        }
WellingtonRamos
Diria que seu erro está aqui.
void realoqueDispositivo(Dispositivo p, int tipo){   
        int util;   
  
        switch (tipo) {   
                   case 1:   
                         System.out.println("Declarei um DIODO\n");   
                         p = new Diodo();   
                         break;   
                   case 2:   
                         System.out.println("Digite o valor da resistencia:");   
                         util = input.nextInt();   
                         p = new Resistor(util);   
                         break;   
                   case 3:   
                         p = new Indutor();   
                         break;                     
                   case 4:   
                         p = new Capacitor();   
                         break;   
                   case 5:   
                         p = new FonteDeCorrente();   
                         break;                       
                   case 6:   
                         p = new FonteDeTensao();   
                         break;                     
                         }   
  
    }
Eu mudaria o código neste ponto para algo como:
Dispositivo realoqueDispositivo(int tipo){   
        Dispositivo p = null;
        int util;   
  
        switch (tipo) {   
                   case 1:   
                         System.out.println("Declarei um DIODO\n");   
                         p = new Diodo();   
                         break;   
                   case 2:   
                         System.out.println("Digite o valor da resistencia:");   
                         util = input.nextInt();   
                         p = new Resistor(util);   
                         break;   
                   case 3:   
                         p = new Indutor();   
                         break;                     
                   case 4:   
                         p = new Capacitor();   
                         break;   
                   case 5:   
                         p = new FonteDeCorrente();   
                         break;                       
                   case 6:   
                         p = new FonteDeTensao();   
                         break;                     
                         }   
        return p;
  
    }
E fora dele faria:
vetor[0][cont] = realoqueDispositivo(CONSTANTE_TIPO);
Outra coisa, você faz testes por instanceof. Só por esse fato, pode estar ferindo o polimorfismo ;) Tente pensar no seu sistema sem o uso de instanceof.
WellingtonRamos

Zkizo:
Nossa, muito obrigada! Com essas alterações o programa rodou sem problemas. Eu pensei que os dois modos fossem equivalentes, nem pensei que poderia ser isso. Você teria uma explicação para isso? Estou realmente curiosa.

“Rearrumei” minha classe Malha. Agora eu voltei ao que eu tinha proposto fazer, uma matriz dinâmica que representasse os 4 ramos e cada um deles pudesse possuir um número N de dispositivos. Vou colocar aqui minha solução.

Quanto ao instanceof ferir o polimorfismo, você tem toda razão. Não tinha percebido isso… Vou fazer alterações que contribuam melhor nesse ponto. Obrigada. :smiley:

Valeu pessoal.


Acontece que, quando você passa metodo(vetor[0][cont]) sem tê-lo iniciado, ele é uma referência a null.
Entretanto, dentro do método:

void metodo(Dispositivo[][] disp) { }
É outra referência.
Quando você faz disp = new Dispositivo(); apenas a referência disp é atualizada, enquanto que a vetor[0][cont] continua apontando para null.

Criado 19 de junho de 2011
Ultima resposta 21 de jun. de 2011
Respostas 18
Participantes 4