5
respostas

System.NullReferenceException

Toda hora que rodo o programa a parte do this.quantidadeDeContas++ apresenta erro e não sei o que mudar.

public partial class Form1 : Form
    {
        private Conta[] contas;
        int quantidadeDeContas;

        public void AdicionaContas(Conta conta)
        {
            this.contas[this.quantidadeDeContas] = conta;
            this.quantidadeDeContas++;
            comboContas.Items.Add(conta);
            comboDestino.Items.Add(conta);
        }

        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            Conta contaDoVictor = new ContaCorrente();
            contaDoVictor.Titular = new Cliente();
            contaDoVictor.Titular.Nome = "Victor Harada";
            contaDoVictor.Numero = 1;
            contaDoVictor.Deposita(250);
            this.AdicionaContas(contaDoVictor);

            Conta contaDoMario = new ContaCorrente();
            contaDoMario.Titular = new Cliente();
            contaDoMario.Titular.Nome = "Mario Bros";
            contaDoMario.Numero = 2;
            contaDoMario.Deposita(100);
            this.AdicionaContas(contaDoMario);

            Conta contaDoMauricio = new ContaCorrente();
            contaDoMauricio.Titular = new Cliente();
            contaDoMauricio.Titular.Nome = "Mauricio Ruas";
            contaDoMauricio.Numero = 3;
            contaDoMauricio.Deposita(600);
            this.AdicionaContas(contaDoMauricio);


            this.contas = new Conta[50];
            /*this.contas[0] = contaDoVictor;
            this.contas[1] = contaDoMario;
            this.contas[2] = contaDoMauricio;*/

            foreach (Conta c in contas)
            {
                if (contas != null)
                {
                    comboContas.Items.Add(c.Titular.Nome);
                }
            }
            foreach (Conta c in contas)
            {
                if (contas != null)
                {
                    comboDestino.Items.Add(c.Titular.Nome);
                }
            }

        }
        private void comboContas_SelectedIndexChanged(object sender, EventArgs e)
        {
            int indiceSelecionado = comboContas.SelectedIndex;
            Conta contaSelecionada = this.contas[indiceSelecionado];

            this.MostraConta();
        }

        private void textoTitular_TextChanged(object sender, EventArgs e)
        {

        }

        private Conta BuscaContaSelecionada()
        {
            int indiceSelecionado = comboContas.SelectedIndex;
            return this.contas[indiceSelecionado];
        }

        private void button1_Click(object sender, EventArgs e)
        {

            string textoDoValorDoDeposito = textoValor.Text;
            double valorDoDeposito = Convert.ToDouble(textoDoValorDoDeposito);
            Conta contaSelecionada = this.BuscaContaSelecionada();
            try
            {
                contaSelecionada.Deposita(valorDoDeposito);
                MessageBox.Show("Depósito realizado com sucesso");
            }
            catch (DepositoNegativo)
            {
                MessageBox.Show("Não é possivel depositar valor negativo");
            }
            this.MostraConta();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string textoDoValorDoSaque = textoValor.Text;
            double valorDoSaque = Convert.ToDouble(textoDoValorDoSaque);
            Conta contaSelecionada = this.BuscaContaSelecionada();
            try
            {
                contaSelecionada.Saca(valorDoSaque);
                MessageBox.Show("Saque realizado com sucesso.");
            }
            catch (SaldoInsuficienteException)
            {
                MessageBox.Show("Saldo Insuficiente.");
            }
            catch (ArgumentException)
            {
                MessageBox.Show("Não é possível sacar valor negativo.");
            }
            MostraConta();
        }
        public void MostraConta()
        {
            Conta mostraContaSelecionada = this.BuscaContaSelecionada();
            textoTitular.Text = Convert.ToString(mostraContaSelecionada.Titular.Nome);
            textoNumero.Text = Convert.ToString(mostraContaSelecionada.Numero);
            textoSaldo.Text = Convert.ToString(mostraContaSelecionada.Saldo);
            textoValor.Text = Convert.ToString(mostraContaSelecionada.valorPadraoSaldo);
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int indiceDestino = comboDestino.SelectedIndex;
            Conta contaDestino = this.contas[indiceDestino];
        }
        private Conta BuscaContaDestino()
        {
            int indiceSelecionado = comboDestino.SelectedIndex;
            return this.contas[indiceSelecionado];
        }

        private void button3_Click(object sender, EventArgs e)
        {
            string textoDaTransferencia = textoValor.Text;
            double valorDaTransferencia = Convert.ToDouble(textoDaTransferencia);
            Conta contaDestino = this.BuscaContaDestino();
            Conta contaTransfere = this.BuscaContaSelecionada();
            contaTransfere.transfere(valorDaTransferencia, contaDestino);

            MessageBox.Show("Transferencia realizada com sucesso");

            this.MostraConta();
        }

        private void textoValor_TextChanged(object sender, EventArgs e)
        {

        }

        private void button3_Click_1(object sender, EventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)
        {
            CadastroDeConta formularioCadastro = new CadastroDeConta(this);
            formularioCadastro.ShowDialog();
        }

    }
}
5 respostas

Olá, Rafael!

Existe uma diferença entre o seu código e o código da aula. Estou postando aqui o método da aula (adaptado para os nomes de parâmetros que você está usando):

        public void AdicionaContas(Conta conta)
        {
            if (this.quantidadeDeContas == this.contas.Length)
            {
                Conta[] novo = new Conta[this.contas.Length * 2];
                for (int i = 0; i < this.quantidadeDeContas; i++)
                {
                    novo[i] = this.contas[i];
                }
                this.contas = novo;
            }
            this.contas[this.quantidadeDeContas] = conta;
            this.quantidadeDeContas++;
            comboContas.Items.Add(conta);
        comboDestino.Items.Add(conta);
        }

Veja por favor se funciona com esse código:

Boa sorte e boas aulas!

Olá, Marcelo!

Substitui o meu método pelo que me informou e continuar dando o mesmo erro, agora no if(this.quantidadeDeContas...)

An unhandled exception of type 'System.NullReferenceException' occurred in Banco.exe

Additional information: Referência de objeto não definida para uma instância de um objeto.

Então se você colocar um breakpoint para inspecionar, o valor de this.contas é null? O programa não está passando pela linha this.contas = new Conta[50];? Pode verificar isso?

Obrigado!

Sim, o valor do this.contas está como null.

Olá Rafael!

Eu estive com um problema bem parecido, você poderia enviar a sua classe CadastroDeContas ?