0

I've been studying Java on my own. I've had this problem which I tried to debug for days but to no avail.

How do I reference grades[0] to lab.score(60) so I can use it in my toString method? I'm trying to assign the score number to lab and references to grade[0] so that I can use it in the main as shown in my code below but all I get is this error:

Exception in thread "main" java.lang.NullPointerException
    at CourseGrades.toString(CourseGrades.java:35)
    at java.lang.String.valueOf(Unknown Source)
    at java.lang.StringBuilder.append(Unknown Source)
    at CourseGrades.main(CourseGrades.java:58) 

My Code:

import java.util.Scanner;

public class CourseGrades {
    private GradedActivity grades[] = new GradedActivity[3];

    public void setLab(GradedActivity lab)
    {
        lab = new GradedActivity();
        lab.setScore(60);
        grades[0] = lab;

    }
    public void setPassFailExam(PassFailExam passfailexam)
    {
        passfailexam = new PassFailExam(10,6,70);
        grades[1] = passfailexam;
    }
    public void setEssay(Essay  essay)
    {
        essay = new Essay(80);
        grades[2]= essay;
    }
    public void setFinalExam(FinalExam finalexam)
    {
        finalexam = new FinalExam(50,4);
        grades[3] = finalexam;
    }
    public String toString()
    {
        String str = "Lab Score: "  + grades[0].getScore() +
                     "\tGrade: "  +
                     "\nPass/Fail Exam Score: "  +
                     "\tGrade: "  +
                     "\nEssay Score: "  +
                     "\tGrade: "  +
                     "\nFinal Exam Score: "  +
                     "\tGrade: " ;
        return str;
    }

    public static void main(String[] args)
    {
        CourseGrades kk = new CourseGrades();
        String st = kk + "testing";
        System.out.println(st);
    }

public class GradedActivity
{
    private double score;

    public void setScore(double s)
    {
        score = s;
    }

    public double getScore()
    {
        return score;
    }

    public char getGrade()
    {
        char letterGrade;

        if (score >=90)
            letterGrade ='A';
        else if (score>=80)
            letterGrade ='B';
        else if (score >=70)
            letterGrade ='C';
        else if (score >=60)
           letterGrade = 'D';
        else 
            letterGrade = 'F';

        return letterGrade;
    }
}
Boris Schegolev
  • 3,601
  • 5
  • 21
  • 34
Muzy
  • 15
  • 1
  • 7
  • 1
    You have to call `setLab()` first. Until then `grades[0]` is null. – shmosel Nov 02 '16 at 05:41
  • when you declare array using `new GradedActivity[3]`, it means only 3 objects are created and you can access only `grades[0]`, `grades[1]` and `grades[2]` and NOT `grades[3]` – Raman Sahasi Nov 02 '16 at 05:45
  • Oh yes i edit the code but still didn't give me the output that im expecting to get.. any help i'm appreciated – Muzy Nov 02 '16 at 06:23
  • @Muzy, try `kk.setLab(new GradedActivity());` in main method after `CourseGrades kk = new CourseGrades();` – TSKSwamy Nov 02 '16 at 06:43
  • @TSKSwamy thank you so much. u r a genius..! – Muzy Nov 07 '16 at 04:18

0 Answers0