Dúvida utilizando static e array genérico

6 respostas
Andre_Brito

Galera, tenho uma dúvida.
To usando um array genérico de inteiros e queria diminuir a quantidade de elementos do mesmo.
Para isso, pensei em fazer o seguinte: duas variáveis

private static int[] array;
    private static int numero = 10;

Crio, preencho e mostro o array:

array = new int[numero];
for (int i = 0; i < numero; i++)
            array[i] = gerar.nextInt(10);
for (int i = 0; i < numero; i++)
            System.out.printf("%d   ", array[i]);

Para diminuir, pensei em fazer o seguinte:

public void diminui()
    {
        int aux = numero;
        int[] velho = new int[aux--];
        numero--;
        for (int i = 0; i < numero; i++)
            velho[i] = array[i];
        testeNovo();
        for (int i = 0; i < numero; i++)
            array[i] = velho[i];
    }

Porém, ele dá um erro quando eu chamo a função de adicionar. Isso tá errado de alguma forma?
Será que ele consegue diminuir o tamanho do array?

Só para complementar: essa é uma classe de teste. Estou testando isso para utilizar em uma aplicação maior (um ag).

Galera, descobri onde fica o erro. É no gerar o valor aleatório. E o mais estranho é que o erro é de NullPointerException!

6 Respostas

felipealbuquerque

O objeto gerar foi instanciado?

malves_info

Amigo tenta fazer desta forma. Diminui o Array e dps passei a referencia do arrayTemp para o array principal

package pckArray;

public class ArrayTest {
	private int indice;
	private int[] array;
	
	public ArrayTest(int indice){
		this.indice = indice;
	}
	
	public void criaArray(){
		array = new int[indice];
	
		for(int i = 0; i < indice; i++)
			array[i] = i;
	}
	public void diminui(int valor){
		indice -= valor;
		int arrayTemp[] = new int[indice];
		for(int i=0; i < indice; i++)
			arrayTemp[i] = array[i];
		
		array = arrayTemp;
		
	}
	
	public void mostraDados(){
		for(int i=0; i < indice; i++)
			System.out.println(array[i]);
	 	   	
		  //Caso queira saber o tamanho do array System.out.println(array.length);
	}
	
	

	public static void main(String[] args) {
		 
		ArrayTest arrayTest = new ArrayTest(10);
		
		arrayTest.criaArray();
		arrayTest.mostraDados();
		arrayTest.diminui(2);
		arrayTest.mostraDados();

	}

}

Lembrando que se vc diminui um array, se obtiver dados no indice excluido esses dados são perdidos

Andre_Brito


BOA! Hehehehe. Foi só falta de atenção mesmo.
Valeu cara :smiley:
Vou analisar sua resposta mais depois malves. To em aula agora :smiley:

Abraços e valeu!

ViniGodoy

Dica. Ao invés de fazer cópias de array com for, use o System.arraycopy. É mais simples e muitíssimo mais rápido (ele vai usar cópia através de funções para manipular memória diretamente).

Exemplo:

Ao invés de:

for(int i=0; i < indice; i++) arrayTemp[i] = array[i];

Faça:

//Copia os VALORES de array para arrayTemp System.arraycopy(array, 0, arrayTemp, 0, arrayTemp.length);

malves_info

ViniGodoy Da na mesma se eu fizer isso:

array = arrayTemp;

eu fiz assim e funcionou blza…

ViniGodoy
array = arrayTemp;

Cuidado. Nesse caso você está atualizando uma referência.

Teste:

int array[] = new int[10];
int outro[] = array;

outro[2] = 10;
System.out.println(array[2]); //Imprime 10!

Em alguns casos, pode ser uma boa fazer isso. Mas é bom saber a diferença.

Criado 13 de novembro de 2007
Ultima resposta 13 de nov. de 2007
Respostas 6
Participantes 4