Retirar item do array

Pessoal, como excluo um item do array?

int[] casas = {"1","1","2","2","3","3","4","4","5","5","6","6","7","7","8","8"};

A minha intençao eh fazer um random desse array e ir eliminando os itens a medida q forem sendo usados.

Vai ser 2 matrizes com 8 casas, kero popular elas randomicamente…

De preferencia deem exemplos com codigos, pois to conhecendo java a 1 semana.

Creio que com array você não vai conseguir retirar elementos deopis de criados, talvez consiga referenciá-los com null.

array[0] = null;

Eu sugeriria que você usasse uma Collection, tipo um ArrayList, que fica bem mais simples:

List lista = new ArrayList(); lista.add(0,"1"); // adiciona "1" na posição 0. lista.remove(0); // remove o conteúdo da posição 0

List lista = new ArrayList();
lista.add(0,“1”); // adiciona “1” na posição 0.
lista.remove(0); // remove o conteúdo da posição 0

Entendi, ai ficaria lista[posicao]?
To lendo sobre arrayList

Como assim?

você utiliza o método add(int posicao, Obj objeto) para adicionar numa posição específica, ou add(Obj objeto) para adicionar na última posição.

E remove(int posição) para remover o elemento.

Não entendi esta última pergunta.

Sorry, quis dizer pra retornar um valor…
lista.get(posicao);

Pretendo fazer assim:

[code]
Random r = new Random();

private int casa =0;
private int numero;

List lista = new ArrayList();
void randomico(){
for(int x; x < 8; x++){
casa++;
bolean addp;
if(addp == true){
addp=false;
lista.add(x++, casa);
}else{
addp=true;
int casaigual=casa-1;
lista.add(x++, casaigual);
}

}
int t_casa=lista.sizeOf()-1;
numero=r.nextIn(t_casa);
lista.remove(numero);
return numero;
}[/code]

com este metodo talvez eu consiga controlar o numero de casas pelo FOR e consiga gerar um array nesse formato:

posicao: 0 casa(valor): 1
1 - 1
2 - 2
3 - 2
4 - 3
4 - 4

talvez assim chegue naquele array la do 1º posts

[quote=O_M3_]
Entendi, ai ficaria lista[posicao]?
To lendo sobre arrayList[/quote]

Em array você acessa as posições desta forma:

lista[posicao];

Em um arrayList:

lista.get(posicao);

Isso retorna o objeto. Lembrando que você vai ter que fazer um cast no arrayList para quando ele retornar o objeto, se fosse Strings, seria assim:

String minhaString = (String)lista.get(posicao);

Inté,

Fiz 2 metodos, este addfig() irah criar uma arraylist com 4 posiçoes definida no while, vai ficar assim o array:

0 -> 1
1 -> 1
2 -> 2
3 -> 2
ok? sendo indice e valor… confiram:

[code]private int casa =0;
private int numero;
private int x=0;
boolean addp = true;

private List lista = new ArrayList();
void addfig(){
while(x < 4){
casa++;

if(addp == true){
addp=false;
lista.add(x, Integer.toString(casa));
}else{
addp=true;
int casaigual=casa-1;
lista.add(x, Integer.toString(casaigual));
}
x++;

}
}[/code]

Agora no outro metodo vou chama-lo 4 vezes para gerar um numero randomico e retirar o numero da list a cada chamada, isso pra nao gerar um randomico repetido.

[code]
private String saiNumero;

String randomico(){
int t_casa=lista.size()-1;
numero=r.nextInt(t_casa);
lista.remove(numero);
saiNumero = (String)lista.get(numero);

return saiNumero;
}[/code]

ao compilar dar isso:

F:\Meus documentos\java>javac -Xlint:unchecked jogo/jogo/corpo.java jogo/jogo/corpo.java:41: warning: [unchecked] unchecked call to add(int,E) as a member of the raw type java.util.List lista.add(x, Integer.toString(casa)); ^ jogo/jogo/corpo.java:45: warning: [unchecked] unchecked call to add(int,E) as a member of the raw type java.util.List lista.add(x, Integer.toString(casaigual)); ^ 2 warnings

Se usar templates resolve o problema:

import java.util.*;
/**
 *
 * @author Usuario
 */
public class TesteGuj {
    
    private int casa = 0;
    private int numero;
    private int x = 0;
    boolean addp = true;
    private String saiNumero;
    private ArrayList<String> lista = new ArrayList<String>();
    
    /** Creates a new instance of TesteGuj */
    public TesteGuj() {
    }
    
    public void addfig(){
        while(x < 4){
            casa++;
            if(addp == true){
                addp = false;
                lista.add(x, Integer.toString(casa));
            }else{
                addp = true;
                int casaigual = casa - 1;
                lista.add(x, Integer.toString(casaigual));
            }
            x++;            
        }
    }
    
    String randomico(){
        Random r = new Random(System.currentTimeMillis());
        int t_casa = lista.size();
        numero = r.nextInt(t_casa);
        lista.remove(numero);
        saiNumero = (String)lista.get(numero);
        
        return saiNumero;
    }
    
}

Repare que não é necessário fazer:

        int t_casa = lista.size() - 1;

Pois quando você manda gerar o inteiro aleatório já é gerado sempre com um número a menos do que você mandou. Por exemplo:

numero = r.nextInt(10);

Irá gerar números aleatórios com o seguinte intervalo: 0 <= numero <= 9.

Inté,

Olá Lelis, primeiramente agradeço a ajuda. Porem ao tentar compilar, dar 2 warnings.

F:\Meus documentos\java>javac face/teste.java Note: face/teste.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.


F:\Meus documentos\java>javac -Xlint:unchecked face/teste.java face/teste.java:24: warning: [unchecked] unchecked call to add(int,E) as a membe r of the raw type java.util.ArrayList lista.add(x, Integer.toString(casa)); ^ face/teste.java:28: warning: [unchecked] unchecked call to add(int,E) as a membe r of the raw type java.util.ArrayList lista.add(x, Integer.toString(casaigual)); ^ 2 warnings

erros no add na lista.

E pq vc usou ArrayList ao inves de List?

Você tá usando o Java 5, certo?

Eu estava obtendo esses warnings quando não estava usando templates, depois que passei a fazer:

private ArrayList<String> lista = new ArrayList<String>();

Os warnings não apareceram mais. Certifique-se que você está fazendo exatamente como acima.

Sobre o ArrayList e List: List é uma interface e o ArrayList implementa ela, então tanto faz, você pode fazer dos dois jeitos. Mas observe o detalhe:

List m = new ArrayList();
m = new Vector(); //correto!

ArrayList a = new ArrayList();
a = new Vector(); //errado!

A segunda opção tá errada pois são tipos diferentes. E no seu código eu mudei por hábito mesmo, acho que fica mais claro, já que só usamos ArrayList();

Deve existir situações mais interessantes de exemplo, por favor, quem puder complementar… :smiley:

[]s

Prq não usa um List , obrigatoriamente usará métodos do ArrayList , List é uma interface de ArrayList , faça co amigo disse acima…