[Resolvido]Duvida sobre vetores

5 respostas
D

minha duvida é a seguinte, tenho que implementar dois metodos em java, em um codigo pre escrito, para realiza uma função. obs: não posso mudar nada do codigo que ja esta escrito.
o problema é, no primeiro metodo que tenho que implementar, ele é void e tenho que criar / alocar um vetor.
eu uso o new, crio o vetor no mesmo metodo, verifico se foi criado (com um if) e saio do mesmo, ate ai tudo ok. porem em outro metodo, que ja esta ecrito, ele verifica(de novo) se o vetor foi criado / alocado, caso negativo ele sai do programa. ai que esta o problema, na segunda verificação ele não encontra o vetor e sai.
então pesquisando por ai, vi que eu teria que retornar o vetor para ele não ser limpo no garbage collector. como eu faço isso na pratica? ja tentei varias coisas, mas sempre ele acaba saindo com a mensagem de erro da segunda verificação.
vou colocar um trecho do godigo para ver se ajuda mais…

public void leituraArquivo()
{
...
alocaMemoria();
inicializaVetorProdutos();
...
	public void alocaMemoria() //metodo que tenho que implementar (não posso altrar nada fora dele)
	{
	       String[] vrVetorProdutos = new String[iTotalProdutos];  
               if (vrVetorProdutos == null)                                       //codigo feito por mim.
		{                                                                            
			System.out.println("vetor não alocado!!!");       
			System.exit(1);                                             
		}                                                                           
	}

	public void inicializaVetorProdutos() //metodo que não posso alterar
	{
		if (vrVetorProdutos == null)
		{
			System.out.println("Erro! A memoria do vetor nao foi alocada");
			System.exit(1);
		}

		for (int iPosicao=0; iPosicao < vrVetorProdutos.length; iPosicao++)
		{
			vrVetorProdutos[iPosicao] = new CProduto();
		}
	}
}

lembrando que, não posso alterar nada que não foi desiguinado (nesse caso, unica coisa que posso alterar é o alocaMemoria). eu posso criar novos metodos e classes, porem tenho que usa-los nos metodos que preciso implementar.
obrigado pela atenção, att Thiago

5 Respostas

L

Vc está criando e inicializando o vetor dentro do método alocaMemoria();

Quando o método terminar o vetor morre! Porisso o outro método não encontra o vetor!

Vc precisa retornar o vetor para o método que chamar alocaMemoria();

Ou então cria o vetor fora(Como variável global) do método e inicializa dentro!

/* -------------------------------------------------------------- */
public void leituraArquivo()  
{  
...  
alocaMemoria();  
inicializaVetorProdutos();  

String[] vrVetorProdutos = null;

...  
    public void alocaMemoria() //metodo que tenho que implementar (não posso altrar nada fora dele)  
    {  
           vrVetorProdutos = new String[iTotalProdutos];    
               if (vrVetorProdutos == null)                                       //codigo feito por mim.  
        {                                                                              
            System.out.println("vetor não alocado!!!");         
            System.exit(1);                                               
        }                                                                             
    }  

   ...
   Outros métodos que usem o vetor!
   ...
}
/* -------------------------------------------------------------- */
D

acho que foi um erro meu não citar que o vrVetorProduto é inicializado no começo da classe.

public class CEstocaProdutos()
{
	private CProduto[] vrVetorProdutos = null;
	private int iTotalProdutos = 0;
	private int iContadorProdutosVetor = 0;
    ...   
    public void leituraArquivo()  
    {  
    ...  // abre um arquivo de texto e le seu conteudo. não convem citar aqui...
    alocaMemoria();  
    inicializaVetorProdutos();  
    ...  // passa para o segundo metodo que preciso implementar o conteudo do arquivo lido. não convem citar aqui...
        public void alocaMemoria() //metodo que tenho que implementar (não posso altrar nada fora dele)  
        {  
               String[] vrVetorProdutos = new String[iTotalProdutos];    
                   if (vrVetorProdutos == null)                                       //codigo feito por mim.  
            {                                                                              
                System.out.println("vetor não alocado!!!");         
                System.exit(1);                                               
            }                                                                             
        }  
      
        public void inicializaVetorProdutos() //metodo que não posso alterar  
        {  
            if (vrVetorProdutos == null)  
            {  
                System.out.println("Erro! A memoria do vetor nao foi alocada");  
                System.exit(1);  
            }  
      
            for (int iPosicao=0; iPosicao < vrVetorProdutos.length; iPosicao++)  
            {  
                vrVetorProdutos[iPosicao] = new CProduto();  
            }  
        }  
    } 
}

então, no primeiro metodo a ser implementado ele inicializa o vetor, que é vrVetorProdutos, que chama uma outra classe (CProduto) que contem os dados dos produtos (nome e quantidade).
eu, sinceramente, acho que so pode implementar codigos nas areas designadas (no caso alocaMamoria). mas posso fazer outros metodos, mas não sei o que fazer (qual metodo instanciar) para que eu possa definir o vetor e ele não ser limpo ao final do mesmo. ou como fazer o metodo retornar o vetor ao final dele, para que ele não seja limpo…
desculpe o mal entendido, obrigado pela resposta, att Thiago

S
public void alocaMemoria() //metodo que tenho que implementar (não posso altrar nada fora dele)    
        {    
               String[] vrVetorProdutos = new String[iTotalProdutos];      
                   if (vrVetorProdutos == null)                                       //codigo feito por mim.    
            {                                                                                
                System.out.println("vetor não alocado!!!");           
                System.exit(1);                                                 
            }                                                                               
        }

Nesse seu código você não está referenciando o array que se encontra como variavel global da sua classe, você está criando outro array. Recomendo que você tire o String[] da frente da variavel vrVetorProdutos para assim ele se referenciar ao array declardo como global. Deve ficar assim:

public void alocaMemoria() //metodo que tenho que implementar (não posso altrar nada fora dele)    
        {    
               vrVetorProdutos = new Produto[iTotalProdutos];      
                   if (vrVetorProdutos == null)                                       //codigo feito por mim.    
            {                                                                                
                System.out.println("vetor não alocado!!!");           
                System.exit(1);                                                 
            }                                                                               
        }
D

finalmente deu certo. muito obrigado strikezado.
eu batendo a cabeça aqui no google para achar como fazer isso, e é algo tao simples…

D

erro meu… botão errado…

Criado 13 de novembro de 2011
Ultima resposta 13 de nov. de 2011
Respostas 5
Participantes 3