Contar elementos nao nulos de um vetor[RESOLVIDO]

preciso de ajuda o que a de errado com esse metodo

class Automovel {        
        private String nome;      
        private float velocidade;    
          
          public  Automovel (String nome,float velocidade){      
            this.nome=nome;      
            this.velocidade =velocidade;      
                  
        }    
           
        public String getNome() {    
            return this.nome;    
       }      
        
        public float getVelocidade() {    
            return this.velocidade;    
       }      
    }   



public class ordenacaoautomovel{  
public static void main(String[] args){  
Automovel[] auto = new Automovel[20];  
  
auto[0] = new Automovel("Xsara",210.0f);  
auto[1] = new Automovel("Golf",200.0f);  
auto[2] = new Automovel("Corsa",150.0f);  
auto[3] = new Automovel("Corolla",205.0f); 
}
}


class Contaelemento{  
public static int contador(Automovel [] v){  
       int j;  
        j=0;  
    for(int i=0;i<v.length;i++){  
           if("".equals(v[i].getNome())){  
             j= j+1;// ELA NAO ACEITA A ATRIBUIÇÃO  
           }  
      }   
  return j;  
    }  
} 

int p=Contaelemento.contador(auto);  
System.out.println(p);  
   

so imrpimi o valor atribuido a ele em cima antes do for ou seja 0 eu preciso conta os vlores nao nulos de um array e retornar o valor

Amigão sua logica tá errada.
Desta forma

    j=0;    
    for(int i=0;i<v.length;i++){    
           if("".equals(v[i].getNome())){    
             j= j+1;// ELA NAO ACEITA A ATRIBUIÇÃO    
           }    
      }    

Você está incrementando o contador j somente quando o elemento não tem o nome preenchido(string “”). E no seu exemplo todos estão preenchidos. Então vai retornar zero sempre
Se você quer contar os elementos não nulos faça assim:

    j=0;    
    for(int i=0;i<v.length;i++){    
           //Se o nome nem é nulo e não-vazio então incrementa
           if( (v[i].getNome() != null) && !(v[i].getNome().isEmpty())){    
             j= j+1;    
           }    
      }    

Abs,>

nao o array e de 20 elemnetos mais so 4 foram preenchidos eu queria que e o metodo retornasse 4

Certo, leia a alteração que eu lhe propus e seja feliz :wink:

Abs,

desculpa funcionou deu certinho a quantidade de elemnetos preenchida

valeu!!!

O importante é a lógica que estava invertida.
Você entendeu e identificou porque estava errado?

Ao terminar, não esqueça de colocar seu topico como RESOLVIDO

[quote=jobs]preciso de ajuda o que a de errado com esse metodo

class Automovel {        
        private String nome;      
        private float velocidade;    
          
          public  Automovel (String nome,float velocidade){      
            this.nome=nome;      
            this.velocidade =velocidade;      
                  
        }    
           
        public String getNome() {    
            return this.nome;    
       }      
        
        public float getVelocidade() {    
            return this.velocidade;    
       }      
    }   



public class ordenacaoautomovel{  
public static void main(String[] args){  
Automovel[] auto = new Automovel[20];  
  
auto[0] = new Automovel("Xsara",210.0f);  
auto[1] = new Automovel("Golf",200.0f);  
auto[2] = new Automovel("Corsa",150.0f);  
auto[3] = new Automovel("Corolla",205.0f); 
}
}


class Contaelemento{  
public static int contador(Automovel [] v){  
       int j;  
        j=0;  
    for(int i=0;i<v.length;i++){  
           if("".equals(v[i].getNome())){  
             j= j+1;// ELA NAO ACEITA A ATRIBUIÇÃO  
           }  
      }   
  return j;  
    }  
} 

int p=Contaelemento.contador(auto);  
System.out.println(p);  
   

so imrpimi o valor atribuido a ele em cima antes do for ou seja 0 eu preciso conta os vlores nao nulos de um array e retornar o valor
[/quote]

eu tinha testado com o array de tamanho 4 por isso tinha dado certo mas com ele de tamanho 20 ta dando erro

você está tentando acessar posições do array de automoveis que não foram instanciadas… NullPointerException

Ajuste seu método dessa forma para executar sem erro e tente entender o que aconteceu

public static int contador(Automovel[] v){ int j = 0; for(Automovel auto : v){ if(auto != null && !auto.getNome().isEmpty()){ j++; } } return j; } }

funcionou so nao entendi logica

no outro metodo ele comparava se fosse diferente de nulo e tivesse vazio ?

valeu

public static int contador(Automovel[] v){ // inicializei a variável int j = 0; // Para cada valor de v, armazeno em auto (Automovel) ...pesquise sobre foreach for(Automovel auto : v){ // Se auto tem instância e nome do automóvel diferente de vazio...então incremento o contador. if(auto != null && !auto.getNome().isEmpty()){ j++; } } return j; } }

entendi
valeu