Java—修改类以计算创建的对象总数

Java—修改类以计算创建的对象总数,java,arrays,Java,Arrays,目前,我正在编写一个包含3个类的小练习初学者程序,我正在尝试修改它。我想修改类Student,以便它计算创建的对象总数,我想修改类Course,以便它包含一个Student类数组。这是我到目前为止所拥有的;任何协助都将不胜感激。我相信这是显而易见的,我只是想说: 班级课程: public class Course { private String courseName; private Student[] students = new Student[100]; private

目前,我正在编写一个包含3个类的小练习初学者程序,我正在尝试修改它。我想修改类Student,以便它计算创建的对象总数,我想修改类Course,以便它包含一个Student类数组。这是我到目前为止所拥有的;任何协助都将不胜感激。我相信这是显而易见的,我只是想说:

班级课程:

public class Course {
  private String courseName;
  private Student[]
  students = new Student[100];
  private int numberOfStudents;

  public Course(String courseName) {
    this.courseName = courseName;
  }

  public void addStudent(String[] Student) {
    Student[numberOfStudents] = students[];
    numberOfStudents++;
  }

  public Student[] getStudents() {
    return students;
  }

  public int getNumberOfStudents() {
    return numberOfStudents;
  }  

  public String getCourseName() {
    return courseName;
  }  

  public void dropStudent(String student) {

  }
}
班级学生:

public class Student {
private int id;
private String name;
private java.util.Date dateCreated;

public Student(int ssn, String newName) {
    id = ssn;
    name = newName;
    dateCreated = new java.util.Date();
}

public int getID() {
    return id; 
}

public String getName() {
    return name;
}

public java.util.Date getDateCreated() {
    return dateCreated;
}
}
和驱动程序类,类TestCourse:

public class TestCourse {
  public static void main(String[] args) {
     Course course1 = new Course("Data Structures");
     Course course2 = new Course("Database Systems");

course1.addStudent("Peter Jones",);
course1.addStudent("Brian Smith");
course1.addStudent("Anne Kennedy");

course2.addStudent("Peter Jones");
course2.addStudent("Steve Smith");

System.out.println("Number of students in " +course1.getCourseName() + ":  "
  + course1.getNumberOfStudents());
String[] students = course1.getStudents();
for (int i = 0; i < course1.getNumberOfStudents(); i++)
  System.out.print(students[i] + ", ");

System.out.println();

System.out.print("Number of students in " +course2.getCourseName() +":  "
  + course2.getNumberOfStudents());

System.out.println();

String[] students1 = course2.getStudents();
for (int i = 0; i < course2.getNumberOfStudents(); i++)
  System.out.print(students1[i] + ", ");
  }
}
公共类测试课程{
公共静态void main(字符串[]args){
课程1=新课程(“数据结构”);
课程2=新课程(“数据库系统”);
课程1.添加学生(“彼得·琼斯”);
课程1.添加学生(“Brian Smith”);
课程1.添加学生(“安妮·肯尼迪”);
课程2.添加学生(“彼得·琼斯”);
课程2.添加学生(“史蒂夫·史密斯”);
System.out.println(“在“+course1.getCourseName()+”中的学生人数:”
+课程1.getNumberOfStudents());
String[]students=course1.getStudents();
对于(int i=0;i
尝试以下解决方案。我已经修复了一些编译错误。你应该能够做一个区分,以了解他们是什么。希望这有帮助

public class Student {
private int id;
private String name;
private java.util.Date dateCreated;

public Student(int ssn, String newName) {
    id = ssn;
    name = newName;
    dateCreated = new java.util.Date();
}

public int getID() {
    return id;
}

public String getName() {
    return name;
}

public java.util.Date getDateCreated() {
    return dateCreated;
}

@Override
public String toString() {
    return name;
}
}
Course.java

public class Course {
private String courseName;
private Student[] students = new Student[100];
private int numberOfStudents;

public Course(String courseName) {
    this.courseName = courseName;
}

public void addStudent(String student) {
    this.students[numberOfStudents] = new Student(0,student);
    numberOfStudents++;
}

public Student[] getStudents() {
    return students;
}

public int getNumberOfStudents() {
    return numberOfStudents;
}

public String getCourseName() {
    return courseName;
}

public void dropStudent(String student) {
}
}
public class TestCourse {
public static void main(String[] args) {
    Course course1 = new Course("Data Structures");
    Course course2 = new Course("Database Systems");

    course1.addStudent("Peter Jones");
    course1.addStudent("Brian Smith");
    course1.addStudent("Anne Kennedy");

    course2.addStudent("Peter Jones");
    course2.addStudent("Steve Smith");

    System.out.println("Number of students in " + course1.getCourseName() + ":  " + course1.getNumberOfStudents());
    Student[] students = course1.getStudents();
    for (int i = 0; i < course1.getNumberOfStudents(); i++)
        System.out.print(students[i] + ", ");

    System.out.println();

    System.out.print("Number of students in " + course2.getCourseName() + ":  " + course2.getNumberOfStudents());

    System.out.println();

    Student[] students1 = course2.getStudents();
    for (int i = 0; i < course2.getNumberOfStudents(); i++)
        System.out.print(students1[i] + ", ");
}
}
TestCourse.java

public class Course {
private String courseName;
private Student[] students = new Student[100];
private int numberOfStudents;

public Course(String courseName) {
    this.courseName = courseName;
}

public void addStudent(String student) {
    this.students[numberOfStudents] = new Student(0,student);
    numberOfStudents++;
}

public Student[] getStudents() {
    return students;
}

public int getNumberOfStudents() {
    return numberOfStudents;
}

public String getCourseName() {
    return courseName;
}

public void dropStudent(String student) {
}
}
public class TestCourse {
public static void main(String[] args) {
    Course course1 = new Course("Data Structures");
    Course course2 = new Course("Database Systems");

    course1.addStudent("Peter Jones");
    course1.addStudent("Brian Smith");
    course1.addStudent("Anne Kennedy");

    course2.addStudent("Peter Jones");
    course2.addStudent("Steve Smith");

    System.out.println("Number of students in " + course1.getCourseName() + ":  " + course1.getNumberOfStudents());
    Student[] students = course1.getStudents();
    for (int i = 0; i < course1.getNumberOfStudents(); i++)
        System.out.print(students[i] + ", ");

    System.out.println();

    System.out.print("Number of students in " + course2.getCourseName() + ":  " + course2.getNumberOfStudents());

    System.out.println();

    Student[] students1 = course2.getStudents();
    for (int i = 0; i < course2.getNumberOfStudents(); i++)
        System.out.print(students1[i] + ", ");
}
}
公共类测试课程{
公共静态void main(字符串[]args){
课程1=新课程(“数据结构”);
课程2=新课程(“数据库系统”);
课程1.添加学生(“彼得·琼斯”);
课程1.添加学生(“Brian Smith”);
课程1.添加学生(“安妮·肯尼迪”);
课程2.添加学生(“彼得·琼斯”);
课程2.添加学生(“史蒂夫·史密斯”);
System.out.println(“在“+course1.getCourseName()+”:“+course1.getNumberOfStudents()中的学生人数”);
学生[]学生=课程1.getStudents();
对于(int i=0;i
您介绍的代码存在许多问题,因此我建议您需要更新一些基本概念

课程
课程中,您定义了一个
addStudent
方法

public void addStudent(String[] Student) {
    Student[numberOfStudents] = students[];
    numberOfStudents++;
}
这甚至没有意义……
Student
未定义为变量(实际上是一个
),然后您似乎试图将
students[]
分配给它……现在
students
被定义为
课程
类中的
学生的数组,但是语法文本就是没有意义

您还完全忽略了
student
变量,这是一个
String
类型,因此我甚至不确定您是如何将其分配给任何对象的……相反,您应该尝试执行以下操作(我认为)


现在,这应该会让事情运行得更顺畅一些,因为这是一个家庭作业练习,而且是为了让你学习,这里有几个提示

仔细看看这段代码:

  private Student[]
  students = new Student[100];

  public void addStudent(String[] Student) {
    Student[numberOfStudents] = students[];
    numberOfStudents++;
  }
提示:

  • 你需要更加注意风格

    • Student
      的声明看起来像是一个名为Student的变量的声明。。。因为你在一个奇怪的地方把它分成两行

    • addStudent
      的参数声明错误。变量名不应以大写字母开头。从来没有。在本例中,这是错误的,因为您还有一个名为
      Student
      的类

      现在,Java编译器可以处理具有相同名称的类和变量的代码。(JLS有解决混乱的规则。)问题是您的代码可能不是您认为的意思。。。这是一件坏事

  • 此语句无效:
    Student[numberOfStudents]=students[]。问题是RHS必须是一个表达式,
    students[]
    不是一个表达式

  • 但是
    addStudent
    方法的根本问题是它没有意义。你到底想在这里做什么?将
    Student
    添加到
    students
    数组中?如果是这样,为什么要向它传递一个字符串数组?为什么你要给这个字符串数组赋值

    我认为您需要将
    addStudent
    的签名更改为
    addStudent(Student)
    。然后更改依赖于该方法签名的各种其他内容。。。包括调用该方法的位置

  • 最后,将
    Student
    声明为
    Student
    的数组是个坏主意。问题是数组有一个固定的上界。如果超出该界限,则会出现运行时异常。在这种情况下,如果
    课程中有超过100名
    学生
    ,您的代码将崩溃

    处理这个问题有多种方法,但最简单的方法是使用
    列表
    而不是
    学生[]
    。这在实现
    dropStudent
    方法时也会有所帮助


  • 您说要修改
    Student
    类以跟踪创建了多少个对象。一种常见的方法是向类中添加一个静态字段,并在构造函数
    public class Student {
        ...
        public static int globalStudents = 0;
        public Student() { globalStudents++; }
        ...
    }
    
    public Student(int ssn, String newName) {
        this(); // default constructor
        id = ssn;
        name = newName;
        dateCreated = new java.util.Date();
    }
    
    ArrayList<Student> myList = new ArrayList<Student>();
    Student s = new Student(123456789, "Jimmy Russell");
    myList.add(s);