Search code examples
javaarrayliststatic-methodsprivate-constructor

Private constructor in class with static methods java


I'm trying to create a class that sorts an array list in descending order of marks. As all my methods are static, I want to write a constructor to prevent class instantiation but am not sure how to go about doing it. I read that a private constructor can be used but unsure how to go about coding it.

Here's my code:

import java.util.*;
import java.io.*;

public class ProcessDegreeMark{

public static ArrayList<Finalist> finalistsInList(String s) throws Exception{
    ArrayList<Finalist> finalists = new ArrayList<Finalist>();
    String id;
    double mark;
    Scanner in = null;
    try
    {
        in = new Scanner(new FileReader(s));
        try
        {
            while(in.hasNextLine())
            {
                id =in.nextLine();
                mark = Double.parseDouble(in.nextLine());
                finalists.add(new Finalist(id,mark));
            }
        }
        finally
        {
            in.close();
        }
    }
    catch(IOException e)
    {
        System.out.println(s+" not found");
    }
    return finalists;
 }


public static void displayFinalists(ArrayList<Finalist> finalists){
  for (int i = 0; i < finalists.size(); i++)
  {
       System.out.println(finalists.get(i));
  }
}


public static void findFinalistID(ArrayList<Finalist> a, String s){
    int count =0;
    for (int i=1;i<a.size();i++)
    {
        if (((a.get(i))).getId().equals(s))
        {
            System.out.println(a.get(i));
            count++;
        }
    }
    if(count==0)
    {
        System.out.println("No candidate found with ID number "+s);
    }
}

public static void findFinalistClass(ArrayList<Finalist> a, String s){
    int count =0;
    for (int i=1;i<a.size();i++)
    {
        if (((a.get(i))).getdegreeClass().equals(s))
        {
            System.out.println(a.get(i));
            count++;
        }
    }
    if(count==0)
    {
        System.out.println("No candidate found with degree class "+s);
    }
}

public static ArrayList<Finalist> sortDegreeMark(ArrayList<Finalist> a){
    ArrayList<Finalist> sortedFinalists = new ArrayList<Finalist>();
    sortedFinalists.addAll(a);
    Collections.sort(sortedFinalists, new FinalistComparator());
    return sortedFinalists;


}

public static void finalistsToFile2(ArrayList<Finalist> finalists, String s) {
    PrintStream out = null;
    try
    {
        out = new PrintStream(new FileOutputStream(s));
        try
        {
            for(int i = 0; i < finalists.size(); i++)
            {
                out.println(finalists.get(i));
            }
        }
        finally
        {
            out.close();
        }
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }

}

public static void findAndSaveFinalistClass(ArrayList<Finalist> a, String s){
    ArrayList<Finalist> searchFinalists = new ArrayList<Finalist>();
    int count =0;
    for (int i=1;i<a.size();i++)
    {
        if (((a.get(i))).getdegreeClass().equals(s))
        {
            System.out.println(a.get(i));
            searchFinalists.add(a.get(i));
            finalistsToFile2(searchFinalists,"testSorted.txt");
            count++;
        }
    }
    if(count==0)
    {
        System.out.println("No candidate found with degree class "+s);
    }
}

    public static void main(String[] args) throws Exception{
 System.out.println("/****************************************************/");
         System.out.println("/*******finalistsInList with invalid file name*******/");
         System.out.println();
         ArrayList<Finalist> testList = finalistsInList("file***.txt");
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/********finalistsInList with valid file name********/");
         System.out.println("/********display to check arraylist populated********/");
         System.out.println();
         ArrayList<Finalist> finalists = finalistsInList("finalMark.txt");
         displayFinalists(finalists);
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/*testing findFinalistID with valid and invalid data*/");
         System.out.println();
         findFinalistID(finalists, "75021");  
         findFinalistID(finalists, "21050");
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/*test findFinalistClass with valid and invalid data*/");
         System.out.println();
         findFinalistClass(finalists, "FIRST"); 
         findFinalistClass(finalists, "THIRD"); 
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/*****run sortedFinalists then test with display*****/");
         System.out.println();
         ArrayList<Finalist> sortedFinalists = sortDegreeMark(finalists);
         displayFinalists(sortedFinalists);
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/*****test finalistsToFile2 with sorted arraylist*****/");
         System.out.println("/**************check file testSorted.txt**************/");
         System.out.println();
         finalistsToFile2(sortedFinalists, "testSorted.txt"); //save the sorted arraylist to a new file, check by opening file
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/*test findAndSaveFinalistClass with valid and invalid data*/");
         System.out.println();
         findAndSaveFinalistClass(finalists, "FIRST"); //test method finds
         findAndSaveFinalistClass(finalists, "THRID"); //check appropriate error message when nothing found, open new text file
         System.out.println();
         System.out.println("/*********************THE END************************/");
     }
}

Solution

  • Static methods belong to the class. I don't really understand why are you worrying about having/not having class instantiation. whether they create one instance or multiple instance the callers will have the same copy of static method.Having said that, You can still limit instantation outside the class by adding a default private constructor like below

    private ProcessDegreeMark(){}