How to solve "Object reference not set to an instance of an object"?

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 tried everything and did not find the error.

    
asked by anonymous 24.05.2016 / 05:06

2 answers

1

I made small changes and your error was on the line

 RepositorioLivros repositorio = new RepositorioLivros();

And the right one in this framework you're using is

 RepositorioLivros repositorio = RepositorioLivros.getInstance();

Another tip is, C # every class inherits object, so you do not need to explicit this inheritance in the end will always be inherited object.

Get and sets in C # are used differently than JAVA and it is debatable why these differences but the community usually use by default

public string Nome { get; set; }

You can take the MVA courses that are very good and still earn 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;
        }

    }

    }
}
    
16.12.2016 / 13:18
0

I did not understand the need for a Repository, and this is very similar to get and set structures used in JAVA. The Repository is not for this, but an abstraction of the DAO layer, which while it is simply a list.

I created this class:

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

Then I changed your entire 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);
        }


    }

Class RepositoryBook:

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;
    }

}
    
24.05.2016 / 09:18