sevagb24
sevagb24

Reputation: 9

Why do I keep getting null instead of the output I want?

This assignment requires me to take in input and print it out. The first half of the output is printing currently, but the other half is giving me null. What's wrong here?

Heres my code:

This is the main class.

import java.util.*;

public class Assignment4 {
    public static void main(String[] args) {
        
        // local variables, can be accessed anywhere from the main method
        char input1 = 'Z';
        // String inputInfo= "";
        String courseName, firstName, lastName, office, university;
        String line = new String();

        // instantiate a Course object
        Course cse110 = null;

        printMenu();

        // Create a Scanner object to read user input
        Scanner scan = new Scanner(System.in);

        do // will ask for user input
        {
            System.out.println("What action would you like to perform?");
            line = scan.nextLine();

            if (line.length() == 1) {
                input1 = line.charAt(0);
                input1 = Character.toUpperCase(input1);

                // matches one of the case statement
                switch (input1) {
                case 'A': // Add a course

                    System.out.print("Please enter the Instructor information:\n");
                    System.out.print("Enter instructor's first name:\t");
                    firstName = scan.nextLine();
                    System.out.print("Enter instructor's last name:\t");
                    lastName = scan.nextLine();
                    System.out.print("Enter instructor's office number:\t");
                    office = scan.nextLine();
                    Instructor myInstructor = new Instructor(firstName, lastName, office);

                    System.out.print("\nPlease enter the Course information:");
                    System.out.print("\nEnter course name:\t");
                    courseName = scan.nextLine();

                    System.out.print("Enter university name:\t");
                    university = scan.nextLine();
                    cse110 = new Course(courseName, myInstructor, university);
                    break;
                case 'D': // Display course
                    System.out.print(cse110.toString());
                    break;
                case 'Q': // Quit
                    break;
                case '?': // Display Menu
                    printMenu();
                    break;
                default:
                    System.out.print("Unknown action\n");
                    break;
                }
            } else {
                System.out.print("Unknown action\n");
            }
        } while (input1 != 'Q' || line.length() != 1);
        scan.close();
    }

    /** The method printMenu displays the menu to a user **/
    public static void printMenu() {
        System.out.print("Choice\t\tAction\n" + "------\t\t------\n" + "A\t\tAdd Course\n" + "D\t\tDisplay Course\n"
                + "Q\t\tQuit\n" + "?\t\tDisplay Help\n\n");
    }

}

Heres the Course class:

import java.util.*;
public class Course 
{
    //----------------------------------------------------------------------
    // ATTRIBUTES
    
    private String courseName;
    private Instructor instructor;
    private String university;
    
    //----------------------------------------------------------------------
    // CONSTRUCTOR
    
    public Course()
    {
        courseName = "?";
        university = "?";
        instructor = null;
    }
    
    public Course(String name, Instructor inst, String univer)
    {
        this.setName(name);
        this.setInstructor(name, Instructor.lastName, Instructor.officeNum);
        this.setUniversity(univer);
        
    }
    
    //----------------------------------------------------------------------
    // ACCESSORS
    
    public String getName() 
    {
        return courseName;
    }
    
    public String getUniversity()
    {
        return university;
    }
    
    public Instructor getInstructor()
    {
        return instructor;
    }
    //----------------------------------------------------------------------
    //METHODS
    
    public void setName(String someName)
    {
        this.courseName = someName;
    }
    
    public void setUniversity(String someUniversity)
    {
        this.university = someUniversity;
    }
    
    public void setInstructor(String firstName, String lastName, String office)
    {
        Instructor.firstName = firstName;
        Instructor.lastName = lastName;
        Instructor.officeNum = office;
    }
    
    public String toString()
    {
        return "Course name:\t" + courseName + " at " + university + "\nInstructor Information:" + instructor + "\n";
    }   
}

Heres the Instructor class:

import java.util.*;


public class Instructor 
{   
    //----------------------------------------------------------------------
    // ATTRIBUTES
    
    public static String firstName;
    public static String lastName;
    public static String officeNum;
    
    //----------------------------------------------------------------------
    // CONSTRUCTOR
    
    public Instructor()
    {
        firstName = "?";
        lastName = "?";
        officeNum = "?";
    }
    
    public Instructor(String first, String last, String office)
    {
        this.setFirstName(first);
        this.setLastName(last);
        this.setOfficeNum(office);
    }
    
    public Instructor(Instructor inst)
    {
        firstName = inst.firstName;
        lastName = inst.lastName;
        officeNum = inst.officeNum;
    }
    

    
    //----------------------------------------------------------------------
    // ACCESSORS
    
    public String getFirstName()
    {
        return firstName;
    }
    
    public String getLastName()
    {
        return lastName;
    }
    
    public String getOfficeNum()
    {
        return officeNum;
    }
        
    //----------------------------------------------------------------------
    //METHODS
        
    public void setFirstName(String someFirstName)
    {
        this.firstName = someFirstName;
    }
    
    public void setLastName(String someLastName)
    {
        this.lastName = someLastName;
    }
    
    public void setOfficeNum(String someOffice)
    {
        this.officeNum = someOffice;
    }
    
    public String toString()
    {
        return ("\nLast Name:\t" + lastName +
                "\nFirst Name:\t " + firstName +
                "\nOffice Number:\t" + officeNum);
    }
        
    
}

And finally heres the output:

> Choice        Action
------      ------
A       Add Course
D       Display Course
Q       Quit
?       Display Help

What action would you like to perform?
A
Please enter the Instructor information:
Enter instructor's first name:  John
Enter instructor's last name:   Appleseed
Enter instructor's office number:   501

Please enter the Course information:
Enter course name:  Intro to Java
Enter university name:  ASU
What action would you like to perform?
D
Course name:    Intro to Java at ASU
Instructor Information:null
What action would you like to perform?

Instead of Information:null, it should be printing out:

Last name: Appleseed
First name: John
Office Number: 501

How can I fix this? Thanks!

Upvotes: 0

Views: 106

Answers (1)

Ricky Mo
Ricky Mo

Reputation: 7618

You've never set the instructor property inside Course, after it is initialized as null. You should not use static fields in Instructor. You should create a new Instructor() and assign the instructor instance to the instructor property of Course

First fix your Instructor class:

public class Instructor 
{   
    /******These should not be public static********/
    private String firstName;
    private String lastName;
    private String officeNum;

    ...
}

Next fix your Course class

public class Course 
{
    private String courseName;
    private Instructor instructor;
    private String university;

    public Course(String name, Instructor inst, String univer)
    {
        this.setName(name);
        this.setInstructor(inst);
        this.setUniversity(univer);
    }

    public void setInstructor(Instructor inst)
    {  
        this.instructor = inst;
    }

    ...
}

Upvotes: 1

Related Questions