java: использовать конструктор другого класса

58
7

Я искал Форум сейчас полчаса, и я просто не нашел решения. Мне нужно написать программу "Студент", которая имеет 2 конструктора (один с параметрами). Теперь я пытаюсь проверить его в своем тестовом классе "StudentTest2", но я просто не могу добраться до конструктора класса Student.

Мой ученик класса:

import java.util.ArrayList;

public class Student{

boolean validMatNumber;
String name;
private int matrikelnummer;
//statisch, da sich die Anzahl der Studenten global ändern muss
static int numberOfStudents;
static ArrayList<Student> students = new ArrayList<Student>();

public Student() {
new Student();
students.add(this);
numberOfStudents++;
}

public Student(String name, int matrikelnummer){
if (matrikelnummer > 9999 && matrikelnummer < 100000){
validMatNumber = true;
this.matrikelnummer = matrikelnummer;
this.name = name;
students.add(this);
numberOfStudents++;
}
else{
validMatNumber = false;
}
}

String printInformation(){
return ("Name: "+ this.name + " Matrikelnummer: " + this.matrikelnummer);
}
void printAllInformation(){
for(Student aStudent: students){
System.out.println("Name: " + aStudent.getName() + "Matrikelnummer: " +
aStudent.getMatrikelnummer());
}
}
public String getName(){
return name;
}
public int getMatrikelnummer(){
return matrikelnummer;
}

boolean isValidMatNumber(){
//Da die Matrikelnummer 5 stellig sein soll und nicht mit 0 anfangen darf,
//habe ich diesen Zahlenbreich gewählt
if (matrikelnummer > 9999 && matrikelnummer < 100000){
validMatNumber = true;
return validMatNumber;
}
else{
validMatNumber = false;
return validMatNumber;
}
}

static int getNumberOfStudents(){
return numberOfStudents;
}

И мой тестовый класс до сих пор (не работает tho):

public class StudentTest2{

public static void main(String[] args){

Student s1 = new Student(Peter, 12345);
}
}

я получаю ошибку

StudentTest2.java:5: ошибка: не может найти символ Студент s1 = новый ученик (Peter, 12345); ^ символ: переменная Питер местоположение: класс StudentTest2

спросил(а) 2017-11-21T14:05:00+03:00 2 года, 11 месяцев назад
1
Решение
59

В вашем конструкторе вы определили String и int;

public Student(String name, int matrikelnummer){

И ваша проблема в том, что вы пытаетесь пройти в Peter, 12345, но Peter не является String. Вам просто нужно окружить String "

Например:

Student s1 = new Student("Peter", 12345);

ответил(а) 2017-11-21T14:08:00+03:00 2 года, 11 месяцев назад
57

вам нужно передать String и int:

Student s1 = new Student("Peter", 12345);

или, как вы думаете, Peter? это абсолютно неизвестно для компилятора. Это приводит к появлению сообщения "не может разрешить символ"

ответил(а) 2017-11-21T14:06:00+03:00 2 года, 11 месяцев назад
41

У вас есть бесконечный цикл в вашем конструкторе:

    public Student() {
new Student(); // infinite recursive calls, delete this line
students.add(this);
numberOfStudents++;
}

то ссылайтесь на Peter как на String или переменную, содержащую String.

ответил(а) 2017-11-21T14:12:00+03:00 2 года, 11 месяцев назад
41

Конструктор класса Student, который вы пытаетесь использовать, принимает значения String и int качестве параметров.

Таким образом, ваш код должен быть:

Student s1 = new Student("Peter", 12345);

Или вы объявляете переменный вызов peter, как указано компилятором:

String Peter = "Peter";
Student s1 = new Student(Peter, 12345);

ответил(а) 2017-11-21T14:10:00+03:00 2 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема