java:使用另一个类

时间:2017-11-21 11:05:13

标签: java constructor

我现在搜索了论坛半小时,我找不到解决方案.. 我必须写一个程序"学生"它有2个构造函数(一个带参数)。现在我想在我的测试类中测试它" StudentTest2"但我不能去学生班的建设者。

我的班级学生是:

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

到目前为止,我的测试类是(不起作用):

public class StudentTest2{

  public static void main(String[] args){

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

我收到错误

StudentTest2.java:5:错误:找不到符号     学生s1 =新学生(Peter,12345);                              ^   符号:变量彼得   location:class StudentTest2

4 个答案:

答案 0 :(得分:1)

您需要传递state_strString

int

或您认为Student s1 = new Student("Peter", 12345); 是什么?编译器完全不知道。它会导致消息“无法解析符号”

答案 1 :(得分:1)

在构造函数中,您定义了Stringint;

public Student(String name, int matrikelnummer){

问题是 - 您正试图传递Peter, 12345,但Peter不是String。您只需用String

包围"即可

例如:

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

答案 2 :(得分:0)

您尝试使用的Student类构造函数接受Stringint值作为参数。

所以你的代码应该是:

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

或者你声明一个变量调用peter,如编译器所示:

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

答案 3 :(得分:0)

你的构造函数中有一个无限循环:

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

然后将Peter称为String或包含String的变量。