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