-2

I'm new here and I'm currently working on some code for university.

I have developed a code for my project but my list's head and tail keep coming back null even though the program itself reads the file it's suppose to get it's info from. Can you guys help me?

Here's the code in question:

    package projectosalarios;
import java.io.BufferedWriter;
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

class Funcionario{
    String Nome;
    String BI;
    int Departamento;
    int Cargo;
    int Salario;
    public Funcionario(String Nome, String BI, int Departamento, int Cargo, int Salario){
        this.Nome = Nome;
        this.BI = BI;
        this.Departamento = Departamento;
        this.Cargo = Cargo;
        this.Salario = Salario;
    }

}

class Lista {
    Node head;
    Node tail;

    public static void add(Lista Lista, Funcionario NovoFuncionario) {
        Node novoNo = new Node (NovoFuncionario);
                if(Lista.head == null){
                    Lista.head = novoNo;
                    Lista.tail = novoNo;
                    }else {
                    novoNo.next = Lista.head;
                Lista.head = novoNo;
        }
    }
}


class Node{
    Funcionario value;
    Node next;
    public Node(Funcionario value){
        this.value = value;
    }
}

public class ProjectoSalarios {


    public static void main(String[] args) throws IOException {

        String NomeFicheiro = "C:\\Users\\Nelson\\Documents\\NetBeansProjects\\ProjectoSalarios\\funcionarios.txt";
        String NomeFicheiro2 = "C:\\Users\\Nelson\\Documents\\NetBeansProjects\\ProjectoSalarios\\salarios.txt";

        Lista ListaFuncionario = new Lista();

        int ArraySalario[];
        ArraySalario = new int[15];

        try{
            File Ficheiro2 = new File(NomeFicheiro2);
            try (Scanner leitorFicheiro = new Scanner (Ficheiro2)) {

                while(leitorFicheiro.hasNextLine()){
                    String linha = leitorFicheiro.nextLine();
                    String dados[] = linha.split(":");
                    int Cargo = Integer.parseInt(dados[0]);
                    int Valor = Integer.parseInt(dados[1]);
                    ArraySalario[Cargo-1]= Valor;

                }
            }

        } catch (FileNotFoundException exception) {
            String mensagem = "Erro: o ficheiro " + NomeFicheiro2 + " não foi encontrado.";
            System.out.println(mensagem);
        }

        try{
            File Ficheiro = new File(NomeFicheiro);
            Scanner leitorFicheiro = new Scanner(Ficheiro);
            Funcionario NovoFuncionario;
            while(leitorFicheiro.hasNextLine()){
                String Linha = leitorFicheiro.nextLine();
                String dados[] = Linha.split(":");
                String Nome = dados[0];
                String BI = dados[1];
                int Departamento = Integer.parseInt(dados[2]);
                int Cargo = Integer.parseInt(dados[3]);


                NovoFuncionario = new Funcionario(Nome, BI, Departamento, Cargo, ArraySalario[Cargo-1]); 
                Lista.add(ListaFuncionario, NovoFuncionario);
            }
        }catch (FileNotFoundException exception) {
            String mensagem = "Erro: o ficheiro " + NomeFicheiro + " não foi encontrado.";
            System.out.println(mensagem);
        }

        try (BufferedWriter Writer = new BufferedWriter ( new FileWriter("C:\\Users\\Nelson\\Documents\\NetBeansProjects\\ProjectoSalarios\\output.txt"))) {
            Writer.write(ProcurarSalario(ListaFuncionario, "12312355"));
            Writer.write(SomaSalario(ListaFuncionario, 1));
            Writer.write(SomaSalarioCargo(ListaFuncionario, 1));
            Writer.write(SalarioAlto(ListaFuncionario, 1000));
            Writer.write(SalarioAltoPessoas(ListaFuncionario, 1000));
            Writer.write(SalarioBaixo(ListaFuncionario, 1000));
            Writer.write(SalarioBaixoPessoas(ListaFuncionario, 1000));
            Writer.write(SalarioAltoDepartamento(ListaFuncionario, 1));
            Writer.write(SalarioBaixoDepartamento(ListaFuncionario, 1));
            Writer.write(Duplicados(ListaFuncionario, "12312355"));
        }

    }

    static int ProcurarSalario(Lista Lista, String BI){ //1
        Node Copy = Lista.head;
        while(Copy!=null){
            if(Copy.value.BI.equals(BI)){
                return Copy.value.Salario;
            }
   Copy = Copy.next;
        }return 0;
    }

    static int SomaSalario(Lista Lista, int Departamento){ //2
        Node Copy = Lista.head;
        int Sum= 0;
        while(Copy !=null){
            if(Copy.value.Departamento == 10){
                Sum+=Copy.value.Salario;
            }
            Copy = Copy.next;
        }return Sum;
    }

    static int SomaSalarioCargo(Lista Lista, int Cargo){ //3
        Node Copy = Lista.head;
        int Sum = 0;
        while (Copy !=null){
            if(Copy.value.Cargo == 3){
                Sum+=Copy.value.Salario;
            }
            Copy = Copy.next;
        }return Sum;
    }

    static int SalarioAlto(Lista Lista, int Salario){ //4
        Node Copy = Lista.head;
        while(Copy !=null && Copy.next != null){ //CHECK HERE
            if(Copy.value.Salario < Copy.next.value.Salario ){
                Copy = Copy.next;
            }else{
                Copy.next = Copy.next.next;
            }
        }return Copy.value.Salario;
    }

    static int SalarioAltoPessoas(Lista Lista, int Salario){ //5
        Node Copy = Lista.head;
        int i = 1;
        while(Copy !=null && Copy.next != null){ //CHECK HERE
            if(Copy.value.Salario < Copy.next.value.Salario ){
                Copy = Copy.next;
                i=1;
            }else if(Copy.value.Salario > Copy.next.value.Salario){
                Copy.next = Copy.next.next;
            }else{
                i++;
                Copy.next = Copy.next.next;
            }
        }return i;
    }

    static int SalarioBaixo(Lista Lista, int Salario){ //6
        Node Copy = Lista.head;
        while(Copy !=null && Copy.next != null){ //CHECK HERE
            if(Copy.value.Salario > Copy.next.value.Salario ){
                Copy = Copy.next;
            }else{
                Copy.next = Copy.next.next;
            }
        }return Copy.value.Salario;
    }



    static int SalarioBaixoPessoas(Lista Lista, int Salario){ //7
        Node Copy = Lista.head;
        int i = 1;
        while(Copy !=null && Copy.next != null){ //CHECK HERE
            if(Copy.value.Salario > Copy.next.value.Salario ){
                Copy = Copy.next;
                i=1;
            }else if(Copy.value.Salario < Copy.next.value.Salario){
                Copy.next = Copy.next.next;
            }else{
                i++;
                Copy.next = Copy.next.next;
            }
        }return i;
    }

    static int SalarioAltoDepartamento(Lista Lista, int Departamento){ //8
        Node Copy = Lista.head;
        int departamento [] = new int [10];
        while(Copy!=null){
            departamento[Copy.value.Departamento-1] += Copy.value.Salario;
            Copy=Copy.next;
        }
        int Maximo=departamento[0];
        int Codigo=0;
        for(int i : departamento) {
            if(departamento [i] > Maximo){
                Maximo = departamento[i];
                Codigo=i+1;
            }
        }return Codigo;
    }

    static int SalarioBaixoDepartamento(Lista Lista, int Departamento){ //9
        Node Copy = Lista.head;
        int departamento [] = new int [10];
        while(Copy!=null){
            departamento[Copy.value.Departamento-1] += Copy.value.Salario;
            Copy=Copy.next;
        }

        int f=0;
        if(departamento[f] == 0){
            f++;
        }
        int Minimo = departamento[f];
        int Codigo=0;
        for(int i : departamento) {
            if(departamento [i] <= Minimo && departamento [i] != 0){
                Minimo = departamento[i];
                Codigo=i+1;
            }
        }return Codigo;
    }

    static String Duplicados(Lista Lista, String BI){
        Node Copy = Lista.head;
        String Escrita =BI;
        while(Copy!=null){
            if(!Copy.value.BI.equals(BI)){
                Copy = Copy.next;
            }else{
                Escrita += ";" + Copy.value.Nome ;
                Copy = Copy.next;
                }
            if(Escrita.equals(BI)){
                Escrita = "Nenhum";
            }
        }return Escrita;
    }





}

*Edit:

In the files you can find this:

funcionarios.txt

Victor Valente:12312355:1:1
João Neves:12312777:10:1
Ivo Leite:12343119:10:2
Osvaldo Pires:12312765:2:1
Tiago Santos:12302050:2:2
Joana Cegripe:12999121:2:3
João Almeida:12340050:5:3
Rui Sebastião:12319101:10:3
Miguel Patrocínio:14233000:3:2
Raquel Cunhada:14244111:2:7
Luís Prima:12319101:1:1

salarios.txt

1:1000
2:1050
3:1200
4:1080
5:1700
6:1081
7:1700
8:1010
9:1910
10:890

I also have attempted to debug but there is no sign of what's wrong with my code.

*Edit: Code has been updated and it still doesn't fill up my list.

  • 1
    Possible duplicate of [What is a NullPointerException, and how do I fix it?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Tim Biegeleisen Jul 04 '16 at 00:59
  • 1
    Difficult to help without knowing what's in your files. Please read [How to create a Minimal, Complete, and Verifiable example](http://stackoverflow.com/help/mcve). Alternatively, try **debugging** your code. – Andreas Jul 04 '16 at 01:20

1 Answers1

0

You have to check whether copy.next is null. Because you are accessing copy.next.value without checking copy.next is null or not.

Copy !=null && Copy.next != null

so you have to add this condition to not to throw nullpointerexception.

class Funcionario {
    String Nome;
    String BI;
    int Departamento;
    int Cargo;
    int Salario;

    public Funcionario(String Nome, String BI, int Departamento, int Cargo,
            int Salario) {
        this.Nome = Nome;
        this.BI = BI;
        this.Departamento = Departamento;
        this.Cargo = Cargo;
        this.Salario = Salario;
    }

}

class Lista {
    Node head;
    Node tail;

    public static void add(Lista Lista, Funcionario NovoFuncionario) {
        Node Novo = new Node(NovoFuncionario);
        if (Lista.head == null) {
            Lista.head = Novo;
            Lista.tail = Novo;
        } else {
            Lista.tail.next = Novo;
            Lista.tail = Novo;
        }
    }

    public static void display(Lista Lista) {
        Node tmp = Lista.head;
        while (tmp != null) {
            System.out.println(tmp.value.Nome);
            tmp = tmp.next;
        }
    }

}

class Node {
    Funcionario value;
    Node next;

    public Node(Funcionario value) {
        this.value = value;
    }
}

public class ProjectoSalarios {

    public static void main(String[] args) {

        String NomeFicheiro = "/home/name/Desktop/funcionarios.txt";
        String NomeFicheiro2 = "/home/name/Desktop/salarios.txt";

        Lista ListaFuncionario = new Lista();

        try {
            File Ficheiro2 = new File(NomeFicheiro2);
            Scanner leitorFicheiro = new Scanner(Ficheiro2);

            int ArraySalario[];
            ArraySalario = new int[15];
            while (leitorFicheiro.hasNextLine()) {
                String linha = leitorFicheiro.nextLine();
                String dados[] = linha.split(":");
                int Cargo = Integer.parseInt(dados[0]);
                int Valor = Integer.parseInt(dados[1]);
                ArraySalario[Cargo - 1] = Valor;

            }
            File Ficheiro = new File(NomeFicheiro);
            leitorFicheiro = new Scanner(Ficheiro);

            while (leitorFicheiro.hasNextLine()) {
                String Linha = leitorFicheiro.nextLine();
                String dados[] = Linha.split(":");
                String Nome = dados[0];
                String BI = dados[1];
                int Departamento = Integer.parseInt(dados[2]);
                int Cargo = Integer.parseInt(dados[3]);

                Funcionario NovoFuncionario = new Funcionario(Nome, BI,
                        Departamento, Cargo, ArraySalario[Cargo - 1]);
                Lista.add(ListaFuncionario, NovoFuncionario);
            }
            Lista.display(ListaFuncionario);
            leitorFicheiro.close();

            /*
             * BufferedWriter Writer = new BufferedWriter ( new
             * FileWriter("/home/name/Desktop/output.txt"));
             * Writer.write(ProcurarSalario(ListaFuncionario, "12312355"));
             * Writer.newLine(); Writer.write(SomaSalario(ListaFuncionario, 1));
             * Writer.newLine(); Writer.write(SomaSalarioCargo(ListaFuncionario,
             * 1)); Writer.newLine(); Writer.write(SalarioAlto(ListaFuncionario,
             * 1000)); Writer.newLine();
             * Writer.write(SalarioAltoPessoas(ListaFuncionario, 1000));
             * Writer.newLine(); Writer.write(SalarioBaixo(ListaFuncionario,
             * 1000)); Writer.newLine();
             * Writer.write(SalarioBaixoPessoas(ListaFuncionario, 1000));
             * Writer.newLine();
             * Writer.write(SalarioAltoDepartamento(ListaFuncionario, 1));
             * Writer.newLine();
             * Writer.write(SalarioBaixoDepartamento(ListaFuncionario, 1));
             * Writer.newLine(); Writer.write(Duplicados(ListaFuncionario,
             * "12312355")); Writer.close();
             */
            System.out.println(ProcurarSalario(ListaFuncionario, "12312355"));
            System.out.println(SomaSalario(ListaFuncionario, 1));
            System.out.println(SomaSalarioCargo(ListaFuncionario, 1));
            System.out.println(SalarioAlto(ListaFuncionario, 1000));
            System.out.println(SalarioAltoPessoas(ListaFuncionario, 1000));
            System.out.println(SalarioBaixo(ListaFuncionario, 1000));
            System.out.println(SalarioBaixoPessoas(ListaFuncionario, 1000));
            System.out.println(SalarioAltoDepartamento(ListaFuncionario, 1));
            System.out.println(SalarioBaixoDepartamento(ListaFuncionario, 1));
            System.out.println(SalarioBaixoDepartamento(ListaFuncionario, 1));
            System.out.println(Duplicados(ListaFuncionario, "12312355"));

        } catch (FileNotFoundException exception) {
            String mensagem = "Erro: o ficheiro " + NomeFicheiro + " ou "
                    + NomeFicheiro2 + " não foi encontrado.";
            System.out.println(mensagem);

        } catch (IOException ex) {
            Logger.getLogger(ProjectoSalarios.class.getName()).log(
                    Level.SEVERE, null, ex);
        }

    }

    static int ProcurarSalario(Lista Lista, String BI) { // 1
        Node Copy = Lista.head;
        while (Copy != null) {
            if (Copy.value.BI.equals(BI)) {
                return Copy.value.Salario;
            }
            Copy = Copy.next;
        }
        return 0;
    }

    static int SomaSalario(Lista Lista, int Departamento) { // 2
        Node Copy = Lista.head;
        int Sum = 0;
        while (Copy != null) {
            if (Copy.value.Departamento == 10) {
                Sum += Copy.value.Salario;
            }
            Copy = Copy.next;
        }
        return Sum;
    }

    static int SomaSalarioCargo(Lista Lista, int Cargo) { // 3
        Node Copy = Lista.head;
        int Sum = 0;
        while (Copy != null) {
            if (Copy.value.Cargo == 3) {
                Sum += Copy.value.Salario;
            }
            Copy = Copy.next;
        }
        return Sum;
    }

    static int SalarioAlto(Lista Lista, int Salario) { // 4
        Node Copy = Lista.head;
        while (Copy != null && Copy.next != null) {
            if (Copy.value.Salario < Copy.next.value.Salario) {
                Copy = Copy.next;
            } else {
                Copy.next = Copy.next.next;
            }
        }
        return Copy.value.Salario;
    }

    static int SalarioAltoPessoas(Lista Lista, int Salario) { // 5
        Node Copy = Lista.head;
        int i = 1;
        while (Copy != null && Copy.next != null) {
            if (Copy.value.Salario < Copy.next.value.Salario) {
                Copy = Copy.next;
                i = 1;
            } else if (Copy.value.Salario > Copy.next.value.Salario) {
                Copy.next = Copy.next.next;
            } else {
                i++;
                Copy.next = Copy.next.next;
            }
        }
        return i;
    }

    static int SalarioBaixo(Lista Lista, int Salario) { // 6
        Node Copy = Lista.head;
        while (Copy != null && Copy.next != null) {
            if (Copy.value.Salario > Copy.next.value.Salario) {
                Copy = Copy.next;
            } else {
                Copy.next = Copy.next.next;
            }
        }
        return Copy.value.Salario;
    }

    static int SalarioBaixoPessoas(Lista Lista, int Salario) { // 7
        Node Copy = Lista.head;
        int i = 1;
        while (Copy != null && Copy.next != null) {
            if (Copy.value.Salario > Copy.next.value.Salario) {
                Copy = Copy.next;
                i = 1;
            } else if (Copy.value.Salario < Copy.next.value.Salario) {
                Copy.next = Copy.next.next;
            } else {
                i++;
                Copy.next = Copy.next.next;
            }
        }
        return i;
    }

    static int SalarioAltoDepartamento(Lista Lista, int Departamento) { // 8
        Node Copy = Lista.head;
        int departamento[] = new int[10];
        while (Copy != null) {
            departamento[Copy.value.Departamento - 1] += Copy.value.Salario;
            Copy = Copy.next;
        }
        int Maximo = departamento[0];
        int Codigo = 0;
        for (int i = 0; i < 10; i++) {
            if (departamento[i] > Maximo) {
                Maximo = departamento[i];
                Codigo = i + 1;
            }
        }
        return Codigo;
    }

    static int SalarioBaixoDepartamento(Lista Lista, int Departamento) { // 9
        Node Copy = Lista.head;
        int departamento[] = new int[10];
        while (Copy != null) {
            departamento[Copy.value.Departamento - 1] += Copy.value.Salario;
            Copy = Copy.next;
        }

        int f = 0;
        if (departamento[f] == 0) {
            f++;
        }
        int Minimo = departamento[f];
        int Codigo = 0;
        for (int i = 0; i < 10; i++) {
            if (departamento[i] <= Minimo && departamento[i] != 0) {
                Minimo = departamento[i];
                Codigo = i + 1;
            }
        }
        return Codigo;
    }

    static String Duplicados(Lista Lista, String BI) {
        Node Copy = Lista.head;
        String Escrita = BI;
        while (Copy != null) {
            if (!Copy.value.BI.equals(BI)) {
                Copy = Copy.next;
            } else {
                Escrita += ";" + Copy.value.Nome;
                Copy = Copy.next;
            }
            if (Escrita.equals(BI)) {
                Escrita = "Nenhum";
            }
        }
        return Escrita;
    }

}
CrazyJavaLearner
  • 368
  • 8
  • 17
  • It still gives me the same error. The thing here is that my list is not being made, the head and tail are still null. – Nelson Arrulo Jul 04 '16 at 12:41
  • What is the error you are getting? And which point you are getting error? – CrazyJavaLearner Jul 04 '16 at 15:37
  • nullpointerexpection. Basically some of my functions have that problem. This error is caused cause I'm using elements of my list that are null, which in turn is caused by.... well I don't know. I've gone over the code a thousand times and I still haven' found the source of my List not being filled – Nelson Arrulo Jul 04 '16 at 16:18
  • @NelsonArrulo I am not getting any error. My answer is: 1000 3250 3600 1700 1 1000 1 0 1 1 12312355;Victor Valente – CrazyJavaLearner Jul 07 '16 at 04:14