Pessoal, como faço para colocar as variáveis lidas de um usuário dentro de um arraylist?
- Crie uma classe para representar esses dados do usuário.
- Nessa classe, defina os atributos que irá representar cada dado.
- Com a classe criada, você conseguirá criar um ArrayList tipado para essa classe. Ex.:
List<SuaClasse> lista = new ArrayList<SuaClasse>();
Isso já está feito, mas o problema é que não sei como faço para por os atributos já lidos dentro do arraylist
Vamos supor que a classe que você tem criada seja assim:
public class DadosUsuario {
private String valorA;
private String valorB;
// getters and setters
}
Veja exemplo para incluir na lista:
String valorLidoA = // recebe valor informado do usuário
String valorLidoB = // recebe valor informado do usuário
// Cria a lista
List<DadosUsuario> listaDados = new ArrayList<DadosUsuario>();
// Cria um objeto com os dados informados
DadosUsuario dado = new DadosUsuario();
dado.setValorA(valorLidoA);
dado.setValorB(valorLidoB);
// Adiciona o objeto com os dados na lista
listaDados.add(dado);
Certo, olha esse trecho do código. Não consigo imprimir os atributos da classe Passagem.
case 1:
passagem.setValor(1000);
System.out.println("Confirmar? S/N");
String confirma1 = s.next();
if("S".equals(confirma1) || "s".equals(confirma1)) {
passagem.Imprimir();
//Supostamente adiciona o objeto com os dados na lista
passagens.add(passagem);
}
Posta o código do método Imprimir
.
public void Imprimir() {
System.out.println("");
System.out.println(" -------- Dados da passagem ----------------- ");
System.out.println(" Nome : " + passageiro.getNome());
System.out.println(" CPF : " + passageiro.getCpf());
System.out.println(" Dia da passagem : " + data.dia+"/"+data.mes+"/"+data.ano );
System.out.println(" Horario da passagem : " + data.hora+":00:00" );
System.out.println(" Destino : " + this.getDestino());
System.out.println(" Origem : " + this.getOrigem());
System.out.println(" Valor : " + this.getValor());
System.out.println(" ----------------------------------------- ");
System.out.println("");
}
Quando você diz que não consegue imprimir. No código que você mandou, a execução cai no case 1 do switch? Chega a entrar no IF? Dá algum erro?
Erro nenhum, ao final eu testei um print e sai isso " [agencia_viagem.Passagem@14991ad]"
mas ai no final, você deve está dando um system.out.println na lista, e não na passagem.
Exatamente isso:
for(Passagem p:passagens )
{
System.out.println(passagens);
}
Já testei sem o for tbm
Altere o seu for para:
for(Passagem p : passagens) {
System.out.println(p.Imprimir());
}
Erro" ‘void’ type not allowed here"
Mals cara, tem que ficar fora do System.out:
for(Passagem p : passagens) {
p.Imprimir();
}
Obrigado, velho! Se não for abusar demais, se eu colocar o “passagens.add(passagem);” no outro case por exemplo, ele sobrescreve?
Sobrescreve não, irá apenas adicionar um outro item na lista.
Ótimo. Uma coisa, quando eu seleciono o “case 1” o programa sai dele e vai para o “case 2” ao invés de pulá-lo.
O programa apenas vai para o case 2
, caso tenha entrado no case 1
e esse não tenha um break
definido.
Verdade, mas eu queria que ao final do “case 1” o programa voltasse para o menu principal:
void Menu() {
System.out.println("");
System.out.println(" Qual operacao deseja realizar ?");
System.out.println(" (1)Compra de passagem aerea ");
System.out.println(" (2)Compra passagem de onibus ");
System.out.println(" (3)Cancelamento ");
System.out.println(" (4)Sair ");
System.out.print(" Operacao: ");
}
Use a estrutura de repetição do ... while
, assim:
String opcao = "";
do {
// Apresenta o menu
opcao = // lê a opção do usuario
// switch com as ações das opções disponíveis
// ao final da execução do switch, automaticamente, o programa voltará para o começo do laço
} while(opcao != "4"); // se opcao for igual a 4, a condição será falsa e sairá do laço