Logo Hardware.com.br
fjopinheiro
fjopinheiro Novo Membro Registrado
6 Mensagens 2 Curtidas

Eliminar um elemento de um vetor em Java

#1 Por fjopinheiro 04/01/2016 - 21:16
Boas pessoal.
Preciso de ajuda.

Como elimino um elemento de um vetor criado desta forma?

public String cria_Conta(String id, String pin, String nome2) throws RemoteException {

String str;
if(index > 20)
{
str = "Vetor Cheiro!";
}else {
contas[index] = new Conta();
contas[index].ID = id;
contas[index].PIN = pin;
contas[index].nome = nome2;
str = "Conta "+id+"criada com sucesso!";
index++;
}
System.out.println(str);

return str;
}
DiguinDeveloper
DiguinDevelo... Super Participante Registrado
313 Mensagens 148 Curtidas
#2 Por DiguinDevelo...
04/01/2016 - 23:08
Use as tags code seguindo a dica desse tópico, isso facilita e muito a leitura.

Quanto ao código, essa é a forma mais prática.
[code=java]
contas[index] = null;
[/code]

Agora se o remover o elemento do vetor quer dizer, diminuí-lo, ai você terá que fazer um algoritmo de troca, ex, se o vetor possui 20 posições e você remove uma, terá de criar um vetor com 19 e copiar os elementos para esse novo vetor, pois em java, não é possível dimensionar um vetor dinamicamente, todo vetor criado tem a quantidade de posições fixas na memória e "morrerá" assim.
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#4 Por tpcvasco
05/01/2016 - 07:02
NewUser1000 disse:

Se você estivesse usando um List<>, por exemplo, poderia usar a função .RemoveAt() em c#, mas acredito que java possua uma similar.


Ele não está usando List<> tá usando o vetor nativo do Java.

fjopinheiro, uma opção é realmente usar o List<> fica mais fácil de remover.
Se não puder, pode usar um flag em cada item, que define se o mesmo está removido ou não.
Se mudar a estrutura do vetor não for uma opção, o mais fácil é trocar o item com o último e decrementar 1 em 'index'. Se a ordem tiver q ser mantida, aí será necessário um loop de trocas de itens, do índice q se quer até o final.
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
fjopinheiro
fjopinheiro Novo Membro Registrado
6 Mensagens 2 Curtidas
#5 Por fjopinheiro
05/01/2016 - 11:46
Boas pessoal.
Agradecido pela ajuda.

8Mas não consegui, pois os meus conhecimentos de Java são fracos.

Eu tenho necessidade de pesquisar no vetor contas[] se o um determinado par id e pin (que são strings) existem, se existirem apagar os dados dessa posição (ou então colocar essa posição a null) , se não existirem devolver mensagem a dizem id e pin não existem.

Agradeço a ajuda.
Shura16
Shura16 Ubbergeek Registrado
2.5K Mensagens 601 Curtidas
#8 Por Shura16
05/01/2016 - 17:01
fjopinheiro disse:
Mas como faço a pesquisa?
desculpa mas não sei
Agradecido


Faça um laço de repetição for com o tamanho do array. Para cada item, verifique (usando if) se sua condição é verdadeira, se sim apague os dados, senão apenas exiba a mensagem.
Coragem não é ausência de medo e sim o controle dele.

Linux em casa!
Windows 10, na empresa!
Agora: Android no bolso!
DiguinDeveloper
DiguinDevelo... Super Participante Registrado
313 Mensagens 148 Curtidas
#10 Por DiguinDevelo...
05/01/2016 - 17:20
fjopinheiro disse:
Agradecido. Já consegui.
Grande abraço


Compartilhar não custa nada... não seja mais um que está com o modo "venha à nós e o vosso reino nada" ativado igual a tantos nesse fórum que apenas querem solucionar suas dúvidas e esquecem dos demais, lembre-se que outras pessoas podem e com certeza terão a mesma dúvida que a sua, não sejamos egoístas...

Seguindo as boas práticas, adicione um Resolvido ao título do seu tópico, assim na listagem será bem identificado. abraço!
fjopinheiro
fjopinheiro Novo Membro Registrado
6 Mensagens 2 Curtidas
#12 Por fjopinheiro
05/01/2016 - 18:34
DiguinDeveloper disse:
Compartilhar não custa nada... não seja mais um que está com o modo "venha à nós e o vosso reino nada" ativado igual a tantos nesse fórum que apenas querem solucionar suas dúvidas e esquecem dos demais, lembre-se que outras pessoas podem e com certeza terão a mesma dúvida que a sua, não sejamos egoístas...

Seguindo as boas práticas, adicione um Resolvido ao título do seu tópico, assim na listagem será bem identificado. abraço!

peço desculpa tinha respondido do telefone.
NewUser1000
NewUser1000 Membro Junior Registrado
45 Mensagens 10 Curtidas
#13 Por NewUser1000
05/01/2016 - 20:33
tpcvasco disse:
Ele não está usando List<> tá usando o vetor nativo do Java.

fjopinheiro, uma opção é realmente usar o List<> fica mais fácil de remover.
Se não puder, pode usar um flag em cada item, que define se o mesmo está removido ou não.
Se mudar a estrutura do vetor não for uma opção, o mais fácil é trocar o item com o último e decrementar 1 em 'index'. Se a ordem tiver q ser mantida, aí será necessário um loop de trocas de itens, do índice q se quer até o final.


Sei que ele não estava usando List<>, foi apenas uma dica para facilitar a remoção.
DiguinDeveloper
DiguinDevelo... Super Participante Registrado
313 Mensagens 148 Curtidas
#14 Por DiguinDevelo...
05/01/2016 - 21:37
fjopinheiro disse:
for(int i=1; i<21; i++)

if ((contas .ID.equals(id)) && contas .PIN.equals(pin)){
contas.ID = null;
contas.PIN = null;
contas.nome = null;
System.out.println("A conta "+id+" foi apagada");
} else {
System.out.println ( "não foi possivel apagar conta!");

}


Bom, algumas pequenas dicas...

Logo no for, evite deixar "números mágicos" como o 21 por exemplo, no futuro seu código pode crescer e o array de contas aumentar, daí você terá que voltar nesse for e arrumar (se lembrar...), o ideal seria:
[code=java]
for (int i = 0; i < contas.length; i++) { // todo array começa pelo índice zero, cuidado!!!
...
[/code]

Todo array por padrão possui o atributo length, uma forma segura e elegante de usar...

Segundo ponto, isso:
[code=java]
contas.ID = null;
contas.PIN = null;
contas.nome = null;
[/code]

Não deveria ser?
[code=java]
contas[i].ID = null;
contas[i].PIN = null;
contas[i].nome = null;
[/code]

Sendo que isso:
[code=java]
contas[i] = null;
[/code]

Seria o ideal, pois evita consumir memória desnecessariamente, já que o que você fez não elimina o objeto Conta do array, mas apenas "limpa" seus atributos, logo quando você precisar ocupar a mesma posição, terá de fazer new Conta novamente, o que pode não dar tempo para o coletor de lixo passar e remover o objeto Conta anterior... tá pegando a idéia?

Todas as dicas que demos a você era justamente para chegar nessa última linha...

Sugiro fortemente você começar a estudar essa apostila gratuita, tem a opção de cadastrar seu email e receber o pdf, ou ler diretamente do navegador, pois os conceitos que você está usando são considerados avançados e não ter uma base legal do comportamento de objetos, estado de memória, etc, pode acabar te complicando lá na frente.

E por favor, não leve meu "puxão de orelha" na maldade, é que esse comportamento é tão rotineiro no fórum e a gente vem com muito boa vontade, sem ganhar nada com isso (financeiramente falando óbvio) e acabamos chateados com isso.

E toco no mesmo assunto, siga as boas práticas desse tópico e formate seu código adequadamente, viu só como fica bem mais apresentável e legível? Chega até ser "cheiroso" big_green.png

Sucesso nos estudos e bemvindo ao fórum dos loucos smile.png
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal