0

I have an assignment to make a grade distribution program. Where I check wether the entered number is grade 0-5.

I got a problem where the test result gives me NullPointerException I think the reason is that I am not using the Object reader that is defined in the beginning of my code. The rest of my code pass all the tests.

public class Main {
private static Object reader;

I am new to Java & programming and I am not sure how to use the object as an input reader. Is it even possible?

Normally I would just do:

Scanner reader = new Scanner(System.in);
number = reader.nextInt();

Basically I need to figure out a way how to read Integer input through a reader Object instead of using the regular reader.nextInt();

Complete code:

    import java.text.*;
    import java.util.ArrayList;
    import java.util.Scanner;

    public class Main {
    private static Object reader;

        public Main() {
        }
      public static int readerFunc(Scanner reader) {
             Integer n = reader.nextInt();
             return n;

        }

        public static void main(String[] args) {

        ArrayList<Integer> grade0 = new ArrayList<Integer>();
        ArrayList<Integer> grade1 = new ArrayList<Integer>();
        ArrayList<Integer> grade2 = new ArrayList<Integer>();
        ArrayList<Integer> grade3 = new ArrayList<Integer>();
        ArrayList<Integer> grade4 = new ArrayList<Integer>();
        ArrayList<Integer> grade5 = new ArrayList<Integer>();
        ArrayList<Integer> grades = new ArrayList<Integer>();

        Scanner reader = new Scanner(System.in);
        DecimalFormat df = new DecimalFormat("#,##0.00");


        System.out.println("Type the points [0-60]: ");

       // int n = reader.nextInt();
       Integer n = 0;
       if(n != null) {
        n = readerFunc(reader);
        }
        while(n != -1) {
            if (n >=0 && n <=29)     {grade0.add(1); System.out.println("Grade: failed");}
            else if (n >29 && n<=34) {grade1.add(1); System.out.println("Grade: 1");}
            else if (n >34 && n<=39) {grade2.add(1); System.out.println("Grade: 2");}
            else if (n >39 && n<=44) {grade3.add(1); System.out.println("Grade: 3");}
            else if (n >44 && n<=49) {grade4.add(1); System.out.println("Grade: 4");}
            else if (n >49 && n<=60) {grade5.add(1); System.out.println("Grade: 5");}

        n = readerFunc(reader);
    }

       System.out.println("Grade distribution:");
       System.out.print("5: ");
       for (Integer i=0; i < grade5.size(); i++){
            System.out.print("*");
       }
       System.out.println("");
       System.out.print("4: ");
       for (Integer i=0; i < grade4.size(); i++){
            System.out.print("*");
       }
       System.out.println(""); 
       System.out.print("3: ");
       for (Integer i=0; i < grade3.size(); i++){
            System.out.print("*");
       }
       System.out.println(""); 
       System.out.print("2: ");
       for (Integer i=0; i < grade2.size(); i++){
            System.out.print("*");
       }
       System.out.println("");
       System.out.print("1: ");
       for (Integer i=0; i < grade1.size(); i++){
            System.out.print("*");
       }
       System.out.println("");
       System.out.print("0: ");
       for (Integer i=0; i < grade0.size(); i++){
                System.out.print("*");
       }
      //grades.addAll(grade0);
        grades.addAll(grade1);
        grades.addAll(grade2);
        grades.addAll(grade3);
        grades.addAll(grade4);
        grades.addAll(grade5);

        System.out.println("");


          if (!grades.isEmpty()) {
        double result = ( 100*grades.size() ) / ( grades.size() + grade0.size() );
        System.out.print("acceptance percentage: " + df.format(result));
        } 

    } 

    }

NullPointerException log:

GradeDistributionTest.testaa(GradeDistributionTest.java:143)      
GradeDistributionTest.testiHylsy(GradeDistributionTest.java:76)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:606) 
    org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    fi.helsinki.cs.tmc.edutestutils.MockStdio$1.evaluate(MockStdio.java:106)
    org.junit.rules.RunRules.evaluate(RunRules.java:20)
    org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    fi.helsinki.cs.tmc.testrunner.TestRunner$TestingRunnable.runTestCase(TestRunner.java:134)
    fi.helsinki.cs.tmc.testrunner.TestRunner$TestingRunnable.doRun(TestRunner.java:89)   
    fi.helsinki.cs.tmc.testrunner.TestRunner$TestingRunnable.run(TestRunner.java:70) 
    java.lang.Thread.run(Thread.java:745)
conan
  • 35
  • 9

0 Answers0