Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Alguem me ajuda por favor.

Ola pessoal, hoje estou estudando Collections framework e para fixar o aprendizado tudo que eu aprendo depois das aulas eu tento implementar nesse meu projeto que deve guardar as minhas contas a pagar , tipo conta de luz, agua, etc.

Nao estou conseguindo adicionar as contas, ja quebrei a cabeça tentei de todo jeito e nao consegui, alguem poderia me dizer um jeito de fazer isso usando as collections , obrigado!

classe conta

import java.util.Scanner;

public class Conta {

    private String nomeConta;
    private double totalApagar;



    //Metodos 
    @Override
    public String toString() {
        return "Conta :"+nomeConta + ", Total a pagar: " + totalApagar + ".";
    }

    //Gett e sett

    public String getNomeConta() {
        return nomeConta;
    }
    public void setNomeConta(String nomeConta) {
        this.nomeConta = nomeConta;
    }
    public double getTotalApagar() {
        return totalApagar;
    }
    public void setTotalApagar(double totalApagar) {
        this.totalApagar = totalApagar;
    }


}

Classe Console

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Console {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        List<Conta> contas = new ArrayList<Conta>();



            System.out.println("-----Gerenciador de contas------");
            System.out.println("1 - Para criar uma nova conta\n2 - "
                    + "Para Ver informacoes da conta\n0 - Para sair");
            int escolha = scan.nextInt();

            switch (escolha) {
            case 1:
                Conta conta = new Conta();
                System.out.println("Nome da conta a pagar:");
                conta.setNomeConta(scan.nextLine());
                System.out.println("Qual o  valor da conta :");
                conta.setTotalApagar(scan.nextDouble());
                contas.add(conta);
                break;
            case 2:
                contas.get(0);
                break;
            case 3:System.exit(0);

        break;
            }


    }
}

Saida do console, assim que eu aperto 1 ele me da os 2 println de uma vez e buga.

-----Gerenciador de contas------
1 - Para criar uma nova conta
2 - Para Ver informacoes da conta
0 - Para sair
1                                              
Nome da conta a pagar:
Qual o  valor da conta :
3 respostas

Vendo aqui no forum encontrei uma pergunta mais ou menos igual a minha solucionada por Rafael Fernando Rauber, sò que ele fez um construtor e colocou todos os atributos na mao , eu gostaria de fazer como se fosse um programa que pede tal atributo e a pessoa digita.

https://cursos.alura.com.br/forum/topico-arraylist-com-varios-campos-37137

solução!

Olá, Natan!

É uma pegadinha chata envolvendo o método nextLine da classe Scanner.

Veja o comentário da documentação:

Advances this scanner past the current line and returns the input that was skipped.

Ou seja, ele avança para a próxima linha do código que vai pedir um input. No seu caso, o nextDouble. E o que você digitar será lido pelo nextLine. É uma espécie de delay.

Seu código, para funcionar, deveria ser o seguinte:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Console {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        List<Conta> contas = new ArrayList<Conta>();

        while(true) { // Adicionado o loop para poder exibir o menu mais uma vez.

            System.out.println("-----Gerenciador de contas------");
            System.out.println("1 - Para criar uma nova conta\n2 - "
                    + "Para Ver informacoes da conta\n3 - Para sair"); // Modificado de 0 para 3 para sair 
            int escolha = scan.nextInt();

            switch (escolha) {
            case 1:
                Conta conta = new Conta();
                System.out.println("Nome da conta a pagar: ");
                scan.nextLine(); // Adicionada essa linha para esperar escrever o nome da Conta.
                conta.setNomeConta(scan.nextLine()); // Realiza a leitura do nome e passa para o próximo comando.
                System.out.println("Qual o  valor da conta: ");
                conta.setTotalApagar(scan.nextDouble());
                contas.add(conta);
                break;
            case 2:
                // Adicionado para exibir as informações da conta
                System.out.println("Nome: " + contas.get(0).getNomeConta());
                System.out.println("Valor: " + contas.get(0).getTotalApagar());
                break;
            case 3:
                System.exit(0);
                break;
            }

            System.out.println("");
            System.out.println("==========");
            System.out.println("");
        }
    }
}

Tente novamente.

Muito obrigado era isso mesmo :D.