« first day (443 days earlier)      last day (3628 days later) » 

 
8 hours later…
09:49
B-B-Bom dia
Hoje em versão remix.
10:10
Aehoooooo!!! A camiseta chegou! Woohoo!
10:29
@Victor colocar o estado atua da proposta. Não?
10:49
@bigown como se refere pessoal na proposta?
10:59
@JorgeB. não entendi o que você quer
tens 11 pessoas referidas na proposta @bigown
você tem que divulgar o link que tem no SHARE THIS
toma cuidado para ñ clicar no uncommit s/ querer (eu fiz isto :) )
@bigown é por isso que o teu commit apareceu de novo :D
Isso traz alguma vantagem?
11:02
se a pessoa entrar pelo seu link, vc referenciou ela, se ela entrar de outra forma, ñ, claro
vc ganha rep no A51 e todo mundo fica sabendo q vc conseguiu um monte d gente :)
pode ganhar medalha tb, claro
na verdade eu esqueci d fazer isto na fase de definição, senão quase todo mundo seria referência minha :)
11:16
Ah ok, isso devia estar naquele pergunta do meta da proposta @bigown
é, seria legal, depois eu coloco
 
8 hours later…
19:44
Olá
 
1 hour later…
20:57
@BrunoAugusto, posta a camisa la no meta
 
2 hours later…
22:39
@mgibsonbr, fiquei curioso agora, é a segunda pessoa que o uso do this é facultativo
@IsvaldoFernandes Dá uma olhada nesse exemplo no ideone
Dentro da própria classe, em métodos de instância/construtores, não precisa usar this, só se tiver uma variável/parâmetro com o mesmo nome e você precisar desambiguar
@DanLucioPrada é essa sala aqui. consegue acessar?
@DanLucioPrada oi
Em relação ao meu código
realizei a parte de deletar
mas acho que está incorreto
@mgibsonbr, vi o link, verdade lá funciona, olhe aqui na minha maquina i.imgur.com/zANf2VL.png
22:51
assim como todo o código, seguindo a sintaxe do java
@IsvaldoFernandes É porque aí você está tentando acessar uma variável de instância num método de classe (o main é estático). No outro caso, ela estava a ser acessada num método de instância (não-static).
A forma e a lógica utilizada no meu código estão erradas? Se sim, porque e em quais aspectos
@DanLucioPrada Eu não vi o código de deletar na sua pergunta. Ou você fez outra?
Realizei outra, em cada novo registro tem um campo código que vai se incrementando e sendo registrado, ae se a pessoa quer deletar alguém, ela informa o código e eu faço o seguinte comando:
listaPessoa.remove(codigo - 1);
@mgibsonbr, ahhh sim agora faz sentido ., essas provas de certificações perguntam todos esses detalhes ):
22:56
@DanLucioPrada Então, o método remove(int) vai remover o enésimo item da lista, independentemente do conteúdo
Se você quer remover "a pessoa que possui o código X", então você vai ter que percorrer a lista procurando por uma pessoa com esse código, e então remover ou usando o próprio objeto Pessoa ou usando seu índice na lista
@IsvaldoFernandes Hehe nessas horas um this ou self explícito ajudam... :P
@mgibsonbr, é uma boa pratica. não entendo por que a prova de certificação tenta testar se vocè e um bom copilador
hahaha
é, na época que eu trabalhava com Java, até pensei em fazer essa certificação, mas depois mudei de plataforma e desisti
saber a diferença entre o que é da classe e o que é da instância é importante (a menos que a linguagem não tenha classes, tipo JavaScript), mas podia ser um pouco mais fácil, sim
Acho que o problema é que no mesmo namespace você acessa tanto variáveis locais, quanto membros da instância, quanto membros da classe, nessa ordem eu acho. Isso economiza teclado, mas te obriga a memorizar a ordem de precedência ao resolver um nome
@IsvaldoFernandes Vou limpar meus comentários na sua resposta, pra ela não ficar poluída
@DanLucioPrada Ainda está aí? Quer perguntar mais alguma coisa? Caso contrário, estou de saída
Fique à vontade para abrir outra (e mais) pergunta no site principal, se ainda tiver mais dúvidas.
23:13
desculpe
a internet caiu
eu n entendi sobre o remove
a forma que eu realizei funciona, afinal ele vai deletar a posição informada pelo código
por exemplo o código 1, é para o primeiro registro
mas ele representa a posição 0 do array
por isso realizei o -1
listaPessoa.remove(codigo - 1);
olá?
Blz, mas depois que você remover a pessoa N, os índices de todas as pessoas depois dela vão mudar
Tipo, se você tem a lista:
[Pessoa(codigo:1), Pessoa(codigo:2), Pessoa(codigo:3), Pessoa(codigo:4)]
e você quiser remover a pessoa 2
listaPessoa.remove(2 - 1);
Então você vai ficar com a lista:
[Pessoa(codigo:1), Pessoa(codigo:3), Pessoa(codigo:4)]
Onde a pessoa 1 tem índice 0, a pessoa 3 tem índice 1 e a pessoa 4 tem índice 2
A lógica acabou completamente!
realmente
e como eu realizaria corretamente esta operação?
Se você quiser acessar as pessoas por índice, blz, sem problemas! Se você quer que cada pessoa tenha código, blz também. Os 2 ao mesmo tempo é que não dá.
Qual versão do Java você está usando?
Pergunto porque no Java 8 deve ter um jeito bem fácil de fazer isso, mas acho que quase ninguém o usa, ainda... :(
estou realizando o projeto em java 8
ótimo! me dá um segundo pra consultar a documentação, enquanto isso sugiro que leia essa pergunta
Pronto! No Java 8 a ArrayList possui um método removeIf que funciona com lambdas. Basta você dizer qual condição a pessoa precisa satisfazer pra ser removida, e passar essa condição pro removeIf. Assim:
listaPessoas.removeIf(p => p.codigo == 2);
p no caso é cada pessoa contida na lista (ele vai testar essa condição pra cada pessoa da lista, e onde p.codigo == 2 retornar true ele vai remover)
Se cada pessoa tiver um código diferente, ele então só vai remover a pessoa com o código 2. Você pode usar a mesma estratégia para outros campos também, ou mesmo para lógicas mais complexas.
23:34
certo mas ae as pessoas tmb terão códigos diferentes, não voltamos ao problema que vc citou em relação a minha lógica?
desculpe, não entendi
você não está criando um campo "codigo" pra cada pessoa, atribuído na criação?
se for isso mesmo, então o código pertence ao objeto Pessoa, independentemente dessa pessoa estar na lista ou não
Ops, eu me enganei no exemplo de código...
listaPessoas.removeIf(p -> p.codigo == 2);
É ->, não =>
estou atribuindo um código para cada registro, cada vez que registro uma pessoa, tem um for rodando pq o usuário pode registrar várias pessoas, e toda vez que ele escolhe a opção de inserir, um campo código é incrementado e atribuído á pessoa que está sendo registrada.
Então, qual é o problema? As pessoas que sobrarem na lista, cada uma terá o seu código.
Ao usar esse código no lambda, essa pessoa será removida (se ela existir).
Da forma como você está fazendo:
case 3:
input.nextLine();
System.out.print("Código: ");
int codigo = input.nextInt();
listaPessoas.removeIf(p -> p.codigo == codigo);
(essa última linha dentro da classe certa, é claro)
break;
(acho que tem um input.nextLine() também antes do break, para terminar a linha)
n está funcionando esse comando, estranho, pode ser a versão do java
estou usando linux
deixa eu conferir a versão
1.6.0_34
a versão
6 então
nesse caso, o lambda ainda não existe
23:47
vou tentar atulizar o java
para a versão 8
A resposta do Isvaldo tem um exemplo que funciona nessa versão
Adaptando ele:
public void deletaPessoa(int codigo) {
for (Pessoa c: this.listaPessoa) {
if (c.getcodigo() == codigo) c.remove();
}
} // fim de deletaPessoa
Preciso sair agora. Experimenta esse código e, se tiver mais dúvidas, abre uma nova pergunta
Falou!
até mais
obrigado pela ajuda

« first day (443 days earlier)      last day (3628 days later) »