2013-09-24 4 views
1

Я создаю класс с использованием java, и это базовый класс для понимания объектов, методов и т. Д. В любом случае имя класса является Student и предполагается присвоить идентификатор студента каждому вновь созданному объекту. начало студенческому билету по адресу 1000000. и приращение на 1, так что каждый новый объект должен иметь класс назначить идентификатор студента, 10000001, 100000002 и т.д ..Создание простого класса студента

public class Student { 

private static long nextID=10000000; 
private long studentID; 
//etc.. 

public Student (String name, long studentID, int count, double total score) { 
     totalScore=0; 
     count=0; 
     this.name=name; 
     studentID=nextID; 
     nextID++; 

} 

public long getStudentID() { 
     return nextID;` 
} 

однако при создании объектов этого класса студент ID продолжает давать всем тот же номер ученика, 10000000. Пожалуйста, помогите

ответ

6

Функция getStudentID возвращает статический счетчик вместо переменной экземпляра.

public long getStudentID() { 
    return nextID; 
} 

Должно быть:

public long getStudentID() { 
    return studentID; 
} 

Кроме того, в конструкторе, можно определить параметр, называемый studentID, который скрывает поле экземпляра одного и того же имени, так что, когда вы делаете это:

studentID=nextID; 

Вы назначаете значение параметру, который затем отбрасывается, когда метод заканчивается. Вы должны удалить параметр, так как вы отслеживаете идентификатор внутри класса, вам не нужно его передавать. Вы также можете изменить его на this.studentID: this явно ссылается на поле экземпляра.

+2

Был как раз собирался добавить, что нет никакой необходимости для параметра studentID. Хороший ответ, я не могу дойти до этих простых вопросов достаточно быстро – sreya

+0

@sreya, lol это отличное решение. – msangel

+0

Теперь мой вывод для studentID равен 0 .. 'public Student (String name) {totalScore = 0; кол = 0; this.name = имя; this.studentID = NextID; NextID ++; } public long getStudentID() {return studentID;} ' – user2809437

0

Ваш метод getStudentID возвращает неправильное значение. Он должен вернуть поле studentID, а не статическое поле nextID.

Как так:

public long getStudentID(){ 
    return this.studentID; 
} 
+0

теперь получает 0 для моего студента id ... 'private static long nextID = 1000000; public Student {this.studentID = nextID; nextID ++} public long getStudentID() {Return this.studentID;} ' – user2809437

+0

@ user2809437 См. ответ msangel; вот что вызывает новую проблему. –

0

использовать это: this.studentID=nextID; вместо studentID=nextID;

+0

Это не решает проблему ** ЛЮБОГО **, которую он мог бы иметь. –

+0

@JoshM, да, он решает. Для первого - без этого OP не писать в поле объекта - он просто присваивает новое значение одному из входных параметров. (Если вы обнаружили, что studentID - это не только поле, но и параметр, так что приспосабливаясь к правилам видимости - он назначает не поле, но этот параметр.). Другое дело, если studentId был статичным, это вызовет проблему, поэтому он гарантирует, что мы назначим поле объекта, но не классу. – msangel

Смежные вопросы