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)