Remover item de um array

1 resposta
edipokbelo

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? :)

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
Aplicação
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);
		  
	}
}

1 Resposta

adriano_si

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…

Criado 19 de maio de 2009
Ultima resposta 19 de mai. de 2009
Respostas 1
Participantes 2