How to Resolve "Object Reference not set to an instance of an Object"?

Asked

Viewed 8,686 times

3

    namespace RepositorioLivrosICC
{

    public class RepositorioLivros
    {
        public static RepositorioLivros instance = null;
        private List<Livro> repositorioLivros;
        private int indice;

        public static RepositorioLivros getInstance()
        {
            if (instance == null)
            {
                instance = new RepositorioLivros();
            }
            return instance;
        }

        private RepositorioLivros()
        {
            this.repositorioLivros = new List<Livro>();
            this.indice = 1;
        }

        public void inserirLivro(Livro l)
        {
            l.setCodigo(indice);
            indice++;
            this.repositorioLivros.Add(l);
        }

        public bool remover(Livro l)
        {
            bool removeu = false;
            foreach (Livro aux in this.repositorioLivros)
            {
                if (aux.getCodigo() == l.getCodigo())
                {
                    this.repositorioLivros.Remove(l);
                    removeu = true;
                }
            }
            return removeu;
        }

        public bool procurar(int index)
        {
            bool achou = false;
            foreach (Livro aux in this.repositorioLivros)
            {
                if (aux.getCodigo() == index)
                {
                    achou = true;
                }
            }
            return achou;
        }

        public string listar()
        {
            string retorno = "";
            foreach (Livro l in this.repositorioLivros)
            {
                retorno += l.ToString();
            }
            return retorno;
        }
    }

    public class Livro : Object
    {

        private string nome;
        private int codigo;
        private Autor autor;

        public Livro(string nome, Autor autor)
        {
            this.setAutor(autor);
            this.setAutor(autor);
        }

        public int getCodigo()
        {
            return this.codigo;
        }

        public void setCodigo(int codigo)
        {
            if (codigo > 0)
            {
                this.codigo = codigo;
            }
            else
            {
                Console.WriteLine("Codigo inválido");
            }
        }

        public void setNome(string nome)
        {
            if (nome != null)
            {
                this.nome = nome;
            }
            else
            {
                Console.WriteLine("Nome do livro inválido");
            }
        }

        public void setAutor(Autor autor)
        {
            if (autor != null)
            {
                this.autor = autor;
            }
        }

        public string getNome()
        {
            return this.nome;
        }

        public Autor getAutor()
        {
            return this.autor;
        }

        public override string ToString()
        {
            string retorno = "";
            retorno += "\nCodigo Livro: " + this.codigo + "\nNome Livro:" + this.nome + this.autor.ToString();
            return retorno;
        }
    }
    public class Autor : Object
    {
        private string nome;
        private string cpf;

        public Autor(string nome, string cpf)
        {
            this.setCpf(cpf);
            this.setNome(nome);
        }

        private void setNome(string nome)
        {
            if (nome != null)
            {
                this.nome = nome;
            }
            else
            {
                Console.WriteLine("Nome autor inválido");
            }
        }

        public void setCpf(string cpf)
        {
            if (cpf != null)
            {
                this.cpf = cpf;
            }
            else
            {
                Console.WriteLine("Cpf inválido");
            }
        }

        public string getNome()
        {
            return this.nome;
        }

        public string getCpf()
        {
            return this.cpf;
        }

        public override string ToString()
        {
            string retorno = "";
            retorno += "\nNome Autor: " + this.nome + "\nCpf: " + this.cpf;
            return retorno;
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            int opcao = -1;

            try
            {
                RepositorioLivros repositorio = new RepositorioLivros();


                Autor aziz = new Autor("Andre Aziz", "12738172398");
                Autor autor1 = new Autor("Carlos Julian", "1273861237");
                Livro livro1 = new Livro("Arquitetura de computadores", aziz);
                Livro livro2 = new Livro("Metodologia Cientifica", autor1);
                repositorio.inserirLivro(livro1);
                repositorio.inserirLivro(livro2);
                string aux;
                do
                {
                    Console.WriteLine("========== Menu ==========");
                    Console.WriteLine("1 - Inserir Livro ");
                    Console.WriteLine("2 - Remover Livro ");
                    Console.WriteLine("3 - Listar Livros");
                    Console.WriteLine("0 - Sair");
                    Console.WriteLine("==========================");
                    Console.WriteLine("Digite uma opcao: ");
                    aux = Console.ReadLine();
                    opcao = Convert.ToInt32(aux);

                    switch (opcao)
                    {
                        case 1:
                            string nome, cpf, nomeLivro;
                            Console.WriteLine("Digite as informações do autor: ");
                            Console.WriteLine("Nome Autor: ");
                            nome = Console.ReadLine();
                            Console.WriteLine("CPF: ");
                            cpf = Console.ReadLine();
                            Console.WriteLine("Digite as informações do Livro: ");
                            Console.WriteLine("Nome Livro: ");
                            nomeLivro = Console.ReadLine();
                            Autor temp = new Autor(nome, cpf);
                            Livro temp1 = new Livro(nomeLivro, temp);
                            repositorio.inserirLivro(temp1);
                            break;
                        case 2:

                            break;
                        case 3:
                            Console.WriteLine("==== Listar ====");
                            repositorio.listar();
                            break;
                        case 0:

                            break;
                        default:
                            Console.WriteLine("Opção Invalida");
                            break;

                    }
                } while (opcao != 0);
            }
            catch (NullReferenceException ex)
            {
                Console.WriteLine(ex.Message);
            }



        }
    }
}

I’ve tried everything and I can’t find the mistake.

  • @jbueno To make the class one Singleton.

  • Thiago, it is not enough to drop the code on a question and wait for it to rain. You have to say, at the very least, where the exception is being launched.

  • @dcastro The problem is that it is not casting any exception, it is running perfectly, but is showing an alert with this message, everything is working ...

2 answers

1

I made minor changes your mistake was on the line

 RepositorioLivros repositorio = new RepositorioLivros();

and the right in this structure that you are using is

 RepositorioLivros repositorio = RepositorioLivros.getInstance();

Another tip is, C# every class inherits Object, so there is no need to spell out this inheritance in the end will always be inherited Object.

Get and sets in c# are used differently to JAVA and it is questionable why these differences exist but the community usually uses by default

public string Nome { get; set; }

You can take the courses from MVA that are very good and still wins certificate.

using System;
using System.Collections.Generic;

namespace ConsoleTest
{

    class Program
    {
        static void Main(string[] args)
        {
            int opcao = -1;

            try
            {
                RepositorioLivros repositorio = RepositorioLivros.getInstance();


                Autor aziz = new Autor("Andre Aziz", "12738172398");
                Autor autor1 = new Autor("Carlos Julian", "1273861237");
                Livro livro1 = new Livro("Arquitetura de computadores", aziz);
                Livro livro2 = new Livro("Metodologia Cientifica", autor1);
                repositorio.inserirLivro(livro1);
                repositorio.inserirLivro(livro2);
                string aux;
                do
                {
                    Console.WriteLine("========== Menu ==========");
                    Console.WriteLine("1 - Inserir Livro ");
                    Console.WriteLine("2 - Remover Livro ");
                    Console.WriteLine("3 - Listar Livros");
                    Console.WriteLine("0 - Sair");
                    Console.WriteLine("==========================");
                    Console.WriteLine("Digite uma opcao: ");
                    aux = Console.ReadLine();
                    opcao = Convert.ToInt32(aux);

                    switch (opcao)
                    {
                        case 1:
                            string nome, cpf, nomeLivro;
                            Console.WriteLine("Digite as informações do autor: ");
                            Console.WriteLine("Nome Autor: ");
                            nome = Console.ReadLine();
                            Console.WriteLine("CPF: ");
                            cpf = Console.ReadLine();
                            Console.WriteLine("Digite as informações do Livro: ");
                            Console.WriteLine("Nome Livro: ");
                            nomeLivro = Console.ReadLine();
                            Autor temp = new Autor(nome, cpf);
                            Livro temp1 = new Livro(nomeLivro, temp);
                            repositorio.inserirLivro(temp1);
                            break;
                        case 2:
                            Console.WriteLine("Digite o index que quer remover:");
                            var indx = -1;
                            int.TryParse(Console.ReadLine(), out indx);
                            var tem = repositorio.procurar(indx);
                            if(tem != null)
                            repositorio.remover(tem);                                                     
                            break;
                        case 3:
                            Console.WriteLine("==== Listar ====");
                            Console.WriteLine(repositorio.listar());
                            break;
                        case 0:

                            break;
                        default:
                            Console.WriteLine("Opção Invalida");
                            break;

                    }
                } while (opcao != 0);
            }
            catch (NullReferenceException ex)
            {
                Console.WriteLine(ex.Message);
            }



        }

    public class RepositorioLivros
    {
        public static RepositorioLivros instance = null;
        private List<Livro> repositorioLivros;
        private int indice;

        public static RepositorioLivros getInstance()
        {
            if (instance == null)
            {
                instance = new RepositorioLivros();
            }
            return instance;
        }

        private RepositorioLivros()
        {
            this.repositorioLivros = new List<Livro>();
            this.indice = 1;
        }

        public void inserirLivro(Livro l)
        {
            l.setCodigo(indice);
            indice++;
            this.repositorioLivros.Add(l);
        }

        public bool remover(Livro l)
        {
            return repositorioLivros.Remove(l);
        }

        public Livro procurar(int index)
        {            
            foreach (Livro aux in this.repositorioLivros)
            {
                if (aux.getCodigo() == index)
                {
                    return aux;
                }
            }
            return null;
        }

        public string listar()
        {
            string retorno = "";
            foreach (Livro l in this.repositorioLivros)
            {
                retorno += l.ToString()+ "\n";
            }
            return retorno;
        }
    }

    public class Livro : Object
    {

        private string nome;
        private int codigo;
        private Autor autor;

        public Livro(string nome, Autor autor)
        {
            this.setAutor(autor);
            this.setAutor(autor);
        }

        public int getCodigo()
        {
            return this.codigo;
        }

        public void setCodigo(int codigo)
        {
            if (codigo > 0)
            {
                this.codigo = codigo;
            }
            else
            {
                Console.WriteLine("Codigo inválido");
            }
        }

        public void setNome(string nome)
        {
            if (nome != null)
            {
                this.nome = nome;
            }
            else
            {
                Console.WriteLine("Nome do livro inválido");
            }
        }

        public void setAutor(Autor autor)
        {
            if (autor != null)
            {
                this.autor = autor;
            }
        }

        public string getNome()
        {
            return this.nome;
        }

        public Autor getAutor()
        {
            return this.autor;
        }

        public override string ToString()
        {
            string retorno = "";
            retorno += "\nCodigo Livro: " + this.codigo + "\nNome Livro:" + this.nome + this.autor.ToString();
            return retorno;
        }
    }
    public class Autor : Object
    {
        private string nome;
        private string cpf;

        public Autor(string nome, string cpf)
        {
            this.setCpf(cpf);
            this.setNome(nome);
        }

        private void setNome(string nome)
        {
            if (nome != null)
            {
                this.nome = nome;
            }
            else
            {
                Console.WriteLine("Nome autor inválido");
            }
        }

        public void setCpf(string cpf)
        {
            if (cpf != null)
            {
                this.cpf = cpf;
            }
            else
            {
                Console.WriteLine("Cpf inválido");
            }
        }

        public string getNome()
        {
            return this.nome;
        }

        public string getCpf()
        {
            return this.cpf;
        }

        public override string ToString()
        {
            string retorno = "";
            retorno += "\nNome Autor: " + this.nome + "\nCpf: " + this.cpf;
            return retorno;
        }

    }

    }
}

0

I didn’t understand the need for a Repositorio, and it’s very similar to get and set structures used in JAVA. The Repository is not for that, but an abstraction of the DAO layer, which is therefore simply a list.

I created this class:

public static class DAO
{
    public static List<Livro> ListaLivros = new List<Livro>();
}

Then I changed your whole project:

static void Main(string[] args)
    {
        int opcao = -1;

        try
        {
            RepositorioLivros repositorio = new RepositorioLivros();


            Autor aziz = new Autor("Andre Aziz", "12738172398");
            Autor autor1 = new Autor("Carlos Julian", "1273861237");
            Livro livro1 = new Livro("Arquitetura de computadores", aziz);
            Livro livro2 = new Livro("Metodologia Cientifica", autor1);
            repositorio.inserirLivro(livro1);
            repositorio.inserirLivro(livro2);
            string aux;
            do
            {
                Console.Clear();
                Console.WriteLine("========== Menu ==========");
                Console.WriteLine("1 - Inserir Livro ");
                Console.WriteLine("2 - Remover Livro ");
                Console.WriteLine("3 - Listar Livros");
                Console.WriteLine("0 - Sair");
                Console.WriteLine("==========================");
                Console.WriteLine("Digite uma opcao: ");
                aux = Console.ReadLine();
                opcao = Convert.ToInt32(aux);

                switch (opcao)
                {
                    case 1:
                        Console.Clear();
                        string nome, cpf, nomeLivro;
                        Console.WriteLine("Digite as informações do autor: ");
                        Console.WriteLine("Nome Autor: ");
                        nome = Console.ReadLine();
                        Console.WriteLine("CPF: ");
                        cpf = Console.ReadLine();
                        Console.WriteLine("Digite as informações do Livro: ");
                        Console.WriteLine("Nome Livro: ");
                        nomeLivro = Console.ReadLine();
                        Autor temp = new Autor(nome, cpf);
                        Livro temp1 = new Livro(nomeLivro, temp);
                        repositorio.inserirLivro(temp1);

                        Console.Clear();
                        Console.WriteLine("Inserido com sucesso");
                        Console.ReadKey();
                        break;
                    case 2:
                        Console.WriteLine("Digite o codigo para remover: ");
                        int codigo = int.Parse(Console.ReadLine());
                        bool retornoRemocao = repositorio.removerLivro(codigo);
                        Console.Clear();
                        if (retornoRemocao == true)
                            Console.WriteLine("Removido com sucesso.");
                        else
                            Console.WriteLine("Não Encontrado.");
                        Console.ReadKey();
                        break;
                    case 3:
                        Console.Clear();
                        Console.WriteLine("==== Listar ====");
                        string retorno = repositorio.listar();
                        Console.WriteLine(retorno);
                        Console.ReadKey();
                        break;
                    case 0:

                        break;
                    default:
                        Console.Clear();
                        Console.WriteLine("Opção Invalida");
                        Console.ReadKey();
                        break;

                }
            } while (opcao != 0);
        }
        catch (NullReferenceException ex)
        {
            Console.WriteLine(ex.Message);
        }


    }

Repositoriolivro class:

public class RepositorioLivros
{
    private List<Livro> ListaLivros { get { return DAO.ListaLivros; } }

    public RepositorioLivros()
    {
    }

    public void inserirLivro(Livro livro)
    {
        //acha o ultimo codigo da lista.
        var ultimo = this.ListaLivros.Last();
        int codigo = 1;
        if(ultimo != null)
        {
            codigo = ultimo.getCodigo() + 1;
        }

        livro.setCodigo(codigo);
        this.ListaLivros.Add(livro);
    }

    public bool removerLivro(int codigo)
    {
        //remove todos os elementos que o codigo forem = codigo. retorna o numero de elementos que removeu atraves do RemoveAll.
        int quantasRemoveu = this.ListaLivros.RemoveAll(x => x.getCodigo() == codigo);
        if (quantasRemoveu != 0)
            return true;
        else
            return false;            
    }

    public bool procurarLivro(int codigo)
    {
        //procura o elemento que codigo = codigo, se nao achar, ele retorna nulo.
        Livro achou = this.ListaLivros.Find(x => x.getCodigo() == codigo);
        if (achou != null)
            return true;
        else
            return false;
    }

    public string listar()
    {
        string retorno = "";
        foreach (Livro l in this.ListaLivros)
        {
            retorno += l.ToString();
            retorno += "\n";
        }
        return retorno;
    }
}

Book Class:

public class Livro : Object
{

    private string nome;
    private int codigo;
    private Autor autor;

    public Livro(string nome, Autor autor)
    {
        this.setNome(nome);
        this.setAutor(autor);
    }

    public int getCodigo()
    {
        return this.codigo;
    }

    public void setCodigo(int codigo)
    {
        if (codigo > 0)
        {
            this.codigo = codigo;
        }
        else
        {
            Console.WriteLine("Codigo inválido");
        }
    }

    public void setNome(string nome)
    {
        if (nome != null)
        {
            this.nome = nome;
        }
        else
        {
            Console.WriteLine("Nome do livro inválido");
        }
    }

    private void setAutor(Autor autor)
    {
        if (autor != null)
        {
            this.autor = autor;
        }
    }

    public string getNome()
    {
        return this.nome;
    }

    public Autor getAutor()
    {
        return this.autor;
    }

    public override string ToString()
    {
        string retorno = "";
        retorno += "\nCodigo Livro: " + this.codigo + "\nNome Livro:" + this.nome + this.autor.ToString();
        return retorno;
    }
}

Author Class:

public class Autor : Object
{
    private string nome;
    private string cpf;

    public Autor(string nome, string cpf)
    {
        this.setCpf(cpf);
        this.setNome(nome);
    }

    private void setNome(string nome)
    {
        if (nome != null)
        {
            this.nome = nome;
        }
        else
        {
            Console.WriteLine("Nome autor inválido");
        }
    }

    public void setCpf(string cpf)
    {
        if (cpf != null)
        {
            this.cpf = cpf;
        }
        else
        {
            Console.WriteLine("Cpf inválido");
        }
    }

    public string getNome()
    {
        return this.nome;
    }

    public string getCpf()
    {
        return this.cpf;
    }

    public override string ToString()
    {
        string retorno = "";
        retorno += "\nNome Autor: " + this.nome + "\nCpf: " + this.cpf;
        return retorno;
    }

}
  • this is my first code in C#, after I posted I saw that there were some things that needed to be changed... and I changed

  • Mark as the correct answer if you have solved your problem.

  • I believe he’s starting now, and he shouldn’t be getting into very complex things now like manipulating lists with Linn and Lambda. are rather complex concepts to understand.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.