Remover item de um array

Bom galera eu procurei no fórum, até tem um jeito mas não é o jeito que eu preciso
e que eu estou apanhando para fazer…
eu não sei usar array direito, até já fiz outra pergunta aqui no fórum ontem e me ajudaram

para listar todos os itens do array eu faço

for (int i=0; i<cc.getTamanho(); i++){ System.out.print(cc.getValor(i)+" ");} System.out.println("");

e ele mostra os itens, as partes vazias do array ele completa com 0. (isso é normal? :shock: )

então para “remover” um item do array, o professor quer que eu faça um decremento da variavel indice :?
eu já quebrei a cabeça de todas as formas e não consegui, alguém pode me dar uma luz? ou duas? :slight_smile:

[code]import java.util.Arrays;

public class NovoArray{
	protected int[]a;
	int indice=0;
	
	NovoArray(int tamanho){
	a = new int[tamanho];
	}
			
public int getIndice(){
	return indice;
	}
			
public void addItem(int numero){
	if(getIndice()<a.length){
	a[getIndice()] = (int)(numero);
	indice++;
	}
}

public int removeItem(int numero){
		return indice=numero;
	}
		
public boolean getListaCheia(){
	if(getIndice()<a.length){
		return false;
		}
	else{
		return true;
		}
	}

public int mostraMaior(){
	int maior=a[0];
	for (int i=0; i<a.length;i++)
		if (maior<a[i])
			maior=a[i];
		return maior;
}

public int mostraMenor(){
	int menor=a[0];
	for (int i=0; i<a.length;i++)
		if (menor>a[i])
			menor=a[i];
		return menor;
	}

public int mostraUltimo(){    
      if (indice == 0){  
       return 0;  
        }  
      else{
    	  return a[indice - 1];    
      }
	}    
	
public int getTamanho(){
	return (int)(a.length);	
	}

public int getValor(int posicao){
	return a[posicao];

 }

public void procuraElemento(int elemento){
   boolean exist = false;
   for (int i=0; i<getTamanho();  i++)
	   if(getValor(i)==elemento){
		   exist=true;
		   break;
		   }
	   if(exist){
		   System.out.println("EXISTE");
	   }
	   else{
		   System.out.println("NAO EXISTE");
	   }
   }

}//ultima chave
[/code]

Aplicação

[code]import java.util.Scanner;

public class AplicNovoArray {
	
	public static void main(String[] args) {
	  Scanner entrada;
	  entrada = new Scanner(System.in);	
	  int t,escolha,item,repetir,elemento;
	  System.out.println("Digite o valor do tamanho do array:");
	  t = entrada.nextInt();
	  NovoArray cc=new NovoArray(t);
	 
	 do{ System.out.println("Menu: \n 1-Inserir Item \n 2-Remover Item \n 3-Mostrar Ultimo Item do Array \n 4-Mostrar todos Itens \n 5-Mostrar Maior \n 6-Mostrar Menor \n 7-Buscar Elemento \n 8-Mostra tamanho array \n 9-Sair ");
	  escolha = entrada.nextInt();
	  switch(escolha){
	  
	  case 1: 
		  do{
		  			if(cc.getListaCheia()){
		  				System.out.println("Array cheio.");
		  			}			  	
		  			else{
		  				System.out.println("Digite o valor que deseja inserir no array");
		  				item = entrada.nextInt();
		  				cc.addItem(item);
		  				}
		  		System.out.println("Deseja inserir outro item? 1-Sim 2-Nao");
		  		repetir = entrada.nextInt();
	  			
	  		}while(repetir==1);
	  			break;
	  			
	  case 2: System.out.println("Sera removido o ultimo item da lista...");
	  				int j,k=0;
	  				if(k<cc.getIndice()){
	  				j=cc.getIndice();
	  				j--;
	  				cc.removeItem(j);
	  			}
	  			break;
	  			
	  case 3: System.out.println("O ultimo item do array é:"+cc.mostraUltimo());
	  			break;
	  			
	  case 4:for (int i=0; i<cc.getTamanho();  i++){
		   		System.out.print(cc.getValor(i)+" ");}
	  			System.out.println("");
	  			break;
	  			
	  case 5: System.out.println("Maior valor é:"+cc.mostraMaior());
	  			break;
	  			
	  case 6: System.out.println("Menor valor é:"+cc.mostraMenor());
	  			break;
	  case 7: System.out.println("Digite o numero pelo qual deseja procurar: ");
	  			elemento = entrada.nextInt();
	  			cc.procuraElemento(elemento);
	  			break;
	  			
	  case 8: System.out.println("Tamanho array:"+cc.getTamanho());
	  			}
	 }while(escolha!=9);
	  
}

}
[/code]

Como parece que o professor não vai abrir mão de se usar um Array, então não vou indicar um ArrayList…

Vamos lá… cara, Arrays não diminuem dinamicamente. Da feita que vc definiu o tamanho dele, será esse tamanho que ele vai ter…

Para fazer o que vc realmente quer, vc terá que anular o Array que removeu o item e copiar o restante dos itens em outro Array…

Algoritmo:

1 - Crie o Array e atribua um tamanho;

2 - Remova um item, dele adicionando um caracter especial, diferente do que normalmente vais usar;

3 - Atribua esse Array a um novo Array, só que tirando o elemento que possui o caracteres especial é claro;

4 - Exiba seu novo Array;

Código:

/* Cara, e bom dar uma otimizada nesse codigo, nao testei com mais de 1 remoçao
   To sem tempo, hehehe */

package br.com.guj.arraydinamico;

public class ArrayDinamico {

    private void removeItem(int[] array, int indice) {
        array[indice] = 'n'; // Aqui so configurei esse Array com um char pra vc
                                // Poder ter o valor 0 em seu Array de inteiros;

        int[] novoArray = pegaNovoArray(array, array.length); // Recebe o novo Array ja sem o valor retirado

        this.exibeArray(novoArray);
    }

    private int[] pegaNovoArray(int[] array, int tamanho) {
        int[] novoArray = new int[tamanho - 1]; // Seu novo Array deve ser 1 tamanho menor que o anterior.
        int j = 0;
        for(int i = 0; i < tamanho; i++) {
            if(array[i] != 'n') {
                novoArray[j] = array[i];
                ++j;
            }
        }
        return novoArray;
    }

    private void exibeArray(int[] array) {
        for(int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }

    public static void main(String[] args) {
        int[] arrayInteiro = {1,2,3};
        ArrayDinamico ad = new ArrayDinamico();
        ad.removeItem(arrayInteiro, 0); // Aqui pode ir de 0 - 2
    }

}

EDIT: Para adicionar, faça o processo ao inverso…