每次创建对象并将其添加到数组

时间:2016-01-30 03:54:22

标签: java object arraylist

我创建了一个构造函数,其中包含创建“学生”对象的方法,其中一部分应该为每个学生分配一个学号,并在每个学生创建时将该数字增加一个......我的学生不会增加。

这是构造函数

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

如果我需要包含所有代码以确定问题所在,请告诉我,但我认为这是其中一个

4 个答案:

答案 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。这样,您的构造函数可以安全地同时由多个线程调用。