首页 > 解决方案 > 为什么我总是得到 null 而不是我想要的输出?

问题描述

这项任务需要我接受输入并打印出来。输出的前半部分当前正在打印,但另一半给我 null。这里有什么问题?

这是我的代码:

这是主要课程。

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");
    }

}

下面是课程类:

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";
    }   
}

下面是 Instructor 类:

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);
    }
        
    
}

最后是输出:

> 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?

而不是Information:null,它应该打印出来:

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

我怎样才能解决这个问题?谢谢!

标签: java

解决方案


在将属性初始化为 之后,您从未在其中设置instructor属性。您不应在 Instructor 中使用静态字段。您应该创建一个讲师实例并将其分配给Coursenullnew Instructor()instructorCourse

首先修复你的Instructor类:

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

    ...
}

接下来修复你的Course课程

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;
    }

    ...
}

推荐阅读