我创建了一个构造函数,其中包含创建“学生”对象的方法,其中一部分应该为每个学生分配一个学号,并在每个学生创建时将该数字增加一个......我的学生不会增加。
这是构造函数
String firstNameInput;
public Student(String fName, String lName, String maj, double gpa)
{
this.firstName = fName;
this.lastName = lName;
this.major = maj;
this.gpa = gpa;
sNumber = 1234567;
}
以下是返回学号
的方法public int getsNumber() {
return sNumber + count++;
}
这是我的toString方法
public String toString()
{
return sNumber + " " + firstName + " " + lastName + " " + major + " " + gpa;
}
这里是学生加入的地方。
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
Student s1 = new Student("Terra", "Ramey", "EE", 3.4);
list.add(s1);
如果我需要包含所有代码以确定问题所在,请告诉我,但我认为这是其中一个
答案 0 :(得分:2)
count++
位于方法getsNumber()
内。这有两个问题:
由于这看起来像是家庭作业,我不会告诉你在哪里放置count++
,但这里有一个强烈的暗示:每次创建一个新学生时都会运行哪种方法(从不这样做) )?
另外,请参阅其他海报&#39;有关static
的建议(您尚未显示count
的声明,因此我们无法判断您是否已使用它)。但是,请确保您了解static
的作用以及静态变量与非静态变量的区别(许多新程序员最终会抛出static
,认为它是神奇的,希望它能解决他们的问题。)
答案 1 :(得分:0)
向类添加静态变量。如下所示:
private static int count = 0;
private int studentNumber;
然后在构造函数中添加以下内容:
public Student(String fName, String lName, String maj, double gpa)
{
this.firstName = fName;
this.lastName = lName;
this.major = maj;
this.gpa = gpa;
sNumber = 1234567;
count = count +1; // to keep the count
this.getStudentNumber = count;
}
还将以下方法添加到Student类:
public int getStudentNumber(){
return this.studentNumber;
}
然后在您的主要内容中,您可以通过以下方式访问计数:
Student student = new Student(//parameters);
System.out.println(Student.count);
System.out.println(student.getStudentNumber());
答案 2 :(得分:0)
如果您允许使用静态字段来存储当前计数,我认为您会在课程中添加private static int currentCount
,然后分配字段sNumber = count++;
可能对您有用。
答案 3 :(得分:0)
确保使用AtomicInteger而不仅仅是int。这样,您的构造函数可以安全地同时由多个线程调用。