Vetor, como inicializá-lo por inteiro sem saber o tamanho que ele vai ficar?

5 respostas
T

Oi meninos, estou com um problema enorme em relação a vetores, que eu na verdade nunca usei.
Eu preciso compor vários vetores com informações do banco de dados, sem saber qual o tamanho que esse vetor vai ficar?
Até aí tudo bem. O problema é que o netBeans esta me reclamando que o nomeDoVetor[i] não foi inicializado, como eu faço pra inicializar o vetor inteiro?

O meu código é esse:

public static ArrayList<Vendas> pesquisarVendas(){
        ArrayList<Vendas> vendas = new ArrayList();
        String sql = "Select * from vendas";
        String nomeCliente[];
        String nomeVendedor[];
        String nomeRota[];
        String data[];
        String vTotal [];
        String canalDeVenda[];
        int idR[];
        int idV[];
        int idC[];
        int id[];
        
        if (conectar() == true) {
             try {

                rs = ps.executeQuery(sql);
                int i=0;
                
                while (rs.next()) {
                    
                    idR[i]=rs.getInt("idRotas");
                    idV[i]= rs.getInt("idVendedores");
                    idC[i]= rs.getInt("idClientes");
                    id [i]=rs.getInt("id");
                    canalDeVenda[i]= rs.getString("canalDeVenda");
                    
                    
                    data[i] = rs.getString("dataDaCompra");
                    data[i] = Data.dataNormal(data[i]);
                    vTotal[i] = Auxiliares.valorBrasileiro(rs.getFloat("precoTotal"));
                }rs.close();
                int y=0;
                while(y<=i){
                if(idC[y]>0){
                    nomeCliente[y] =pegarNomeClientes(idC[y]);}
                if(idR[y]>0){
                    nomeRota[y]=pegarNomeRotas(idR[y]);}
                if(idV[y]>0){
                     nomeVendedor[y]= pegarNome(idV[y]);}
                vendas.add(new Vendas (id[y],canalDeVenda[y],nomeRota[y],nomeCliente[y],nomeVendedor[y],data[y],vTotal[y]));
               y= y+1;}
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, "Erro no banco de dados", "ERRO", JOptionPane.ERROR_MESSAGE);
                 
            }
            desconectar();
        }
        return vendas;
    }

5 Respostas

T

Isso está acontecendo com todas as variáveis,m esmo quando estou atribuindo um valor para elas.

Felagund

ta faltando um new por isso que o netbeans reclama.

Por que vc não usa um objeto generico e cria uma lista desse objeto

class ObjetoAux{
   private String nomeCliente;
   private String nomeVendedor;
   //Transforme cada array em um campo unico dessa classe
  public Vendas toVendas(){
      //arqui vc faz um codigo para converter esse objeto em um objeto vendas
  }
}
public  static ArrayList<Vendas> pesquisarVendas(){  
   ArrayList<Vendas> vendas = new ArrayList<Vendas>();  
   ArrayList<ObjetoAux> obj = new ArrayList<ObjetoAux>();  
   while (rs.next()) { 
        obj.add(new ObjetoAux(rs.getInd("algumCampo")));//preenche o objeto aux.
   }
    //outros tratamentos
   for(ObjetoAux aux : obj){
     vendas.add(aux.toVendas());
   }
return vendas;
}

Assim fica mais legivel e mais facil, vc não consegue trabalhar com vetores sem definir um tamanho.

pvrsouza

Essa eu não conhecia!

Boa Felagund!

mario.fts

vc TEM QUE definir o tamanho do array na hora que vc instancia ele. os vetores não aumentam de tamanho dinamicamente.

Se vc não sabe o tamanho do seu array, vc pode utilziar uma das classes de collections, como ArrayList no lugar.

Uma crítica: Seu código está uma bagunça.

Vc precisa mesmo passar todos os arrays pro construtor de Vendas? Essa classe representa um monte de Venda mesmo?
Melhor vc rever seu design, pq isso que vc fez não tem nada de orientação a objetos, e a manutenção desse código vai ser um parto.

[]'s

EDIT: siga as dicas do Felagund, já melhor em 90%.

T

Muito obrigada, resolveu realmente o problema :smiley: :D!

Criado 10 de fevereiro de 2010
Ultima resposta 10 de fev. de 2010
Respostas 5
Participantes 4