2017-04-30 47 views
1

我工作的学校最后的项目,有一些麻烦。我从来没有在Java中进行任何编程,也没有任何面向对象的编程,所以我的代码可能不会那么好。ArrayList的错误 - 无法找到象征

我有我的数组列表的一些问题。我遇到一个错误,说找不到符号 - class studentInfo。我在做什么我的代码不正确?这阻止了我编译代码。所有的学生信息都是假的。

而且会有人有关于如何清理或优化我的代码的任何建议?

import java.util.ArrayList; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Roster 
{ 
    private static ArrayList<studentInfo> studentList = new ArrayList<>(); 

    public static void main(String[] args) 
    { 

     add(1, "John", "Smith", "[email protected]", 20, 88, 79, 59); 
     add(2, "Suzan", "Erickson", "[email protected]", 19, 91, 72, 85); 
     add(3, "Jack", "Napoli", "The_lawyer99yahoo.com", 19, 85, 84, 87); 
     add(4, "Erin", "Black", "[email protected]", 22, 91, 98, 82); 
     print_all(); 
     print_invalid_emails(); 
     print_average_grade(2); 
     remove(3); 
     remove(3); 



    } 
    public static void add (int studentID, String firstName, String lastName, String email, int age, int grade1, int grade2, int grade3) 
    { 
     int[] grades = {grade1, grade2, grade3}; 
     studentInfo newStudent = new studentInfo (studentID, firstName, lastName, email, age, grades); 
     studentList.add(newStudent); 
    } 

    public static void remove(int studentID) 
    { 
     for (studentInfo i: studentList) { 
      if (i.getStudentID == studentID) { 
       studentList.remove(i); 
       System.out.println("Student Removed"); 
      } 
      else { 
      System.out.println("A student with this ID(studentID) was not found."); 
      return; 
      } 

     } 
    } 
    public static void print_all(){ 
    for (studentInfo i: studentList) { 
     studentList.get(i).print(); 
    } 
    } 
    public static void print_average_grade(int studentID) { 
     studentList.get(studentID).getAverageGrade(); 
} 

public static void print_invalid_emails() { 
    String RFC5322 = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-][email protected][a-zA-Z0-9.-]+$"; 
    Pattern pattern = Pattern.compile(RFC5322); 
    for (studentInfo i: studentList) { 
     String email = i.getEmail; 
     Matcher matcher = pattern.matcher(email); 
     System.out.println(email +":\t"+ matcher.matches()); 
    } 

} 


} 

我的第二类

public class Student 
{ 
    private int studentID; 
    private String firstName; 
    private String lastName; 
    private String email; 
    private int age; 
    private int[] grades; 

    public Student (int studentID, String firstName, String lastName, String email, int age, int grades[]) 
    { 
    setStudentID(studentID); 
    setFirstName(firstName); 
    setLastName(lastName); 
    setEmail(email); 
    setAge(age); 
    setGrades(grades); 

    } 

    public void setStudentID(int studentID) { 
     this.studentID = studentID; 
    } 

    public void setFirstName(String firstName) 
    { 
     this.firstName = firstName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public void setEmail(String email) { 
     this.email = email; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public void setGrades(int[] grades) { 
     this.grades = grades; 
    } 

    public int getStudentID() { 
     return studentID; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public String getFullName() { 
     return firstName + lastName; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public int getAge() { 
     return age; 
    } 

    public int[] getGrades() { 
     return grades; 
    } 

    public int getAverageGrade() { 
     int averageGrade = 0; 
      for (int grade : grades) { 
       averageGrade += grade; 
      } 
     return averageGrade; 
    } 
    public void print() { 
     System.out.println(
     "Student Name:\t" + getFullName() + "\n " + 
     "Student ID:\t" + getStudentID() + "\n" + 
     "Email:\t" + getEmail() + "\n" + 
     "Age:\t" + getAge() + "\n" + 
     "Average Grade:\t" + getAverageGrade() 
     ); 

    } 


} 
+1

你的意思'Student',而不是'studentInfo'? –

回答

1

我做了如下修改代码:

  • ArrrayList应存储Student类型的对象。 studentInfo不引用任何定义的类。
  • 在方法add,更改的newStudent类型Student
  • 请在removeprint_allprint_invalid_emails方法for循环同样必要的调整。

改正的代码如下所示:

import java.util.ArrayList; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Roster 
{ 
    private static ArrayList<Student> studentList = new ArrayList<>(); 

    public static void main(String[] args) 
    { 

     add(1, "John", "Smith", "[email protected]", 20, 88, 79, 59); 
     add(2, "Suzan", "Erickson", "[email protected]", 19, 91, 72, 85); 
     add(3, "Jack", "Napoli", "The_lawyer99yahoo.com", 19, 85, 84, 87); 
     add(4, "Erin", "Black", "[email protected]", 22, 91, 98, 82); 
     print_all(); 
     print_invalid_emails(); 
     print_average_grade(2); 
     remove(3); 
     remove(3);  
    } 

    public static void add (int studentID, String firstName, String lastName, String email, int age, int grade1, int grade2, int grade3) 
    { 
     int[] grades = {grade1, grade2, grade3}; 
     Student newStudent = new Student (studentID, firstName, lastName, email, age, grades); 
     studentList.add(newStudent); 
    } 

    public static void remove(int studentID) 
    { 
     for (Student i: studentList) { 
      if (i.getStudentID() == studentID) { 
       studentList.remove(i); 
       System.out.println("Student Removed"); 
      } 
      else { 
      System.out.println("A student with this ID(studentID) was not found."); 
      return; 
      } 

     } 
    } 
    public static void print_all(){ 
    for (Student i: studentList) { 
     i.print(); 
    } 
    } 
    public static void print_average_grade(int studentID) { 
     studentList.get(studentID).getAverageGrade(); 
} 

public static void print_invalid_emails() { 
    String RFC5322 = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-][email protected][a-zA-Z0-9.-]+$"; 
    Pattern pattern = Pattern.compile(RFC5322); 
    for (Student i: studentList) { 
     String email = i.getEmail(); 
     Matcher matcher = pattern.matcher(email); 
     System.out.println(email +":\t"+ matcher.matches()); 
    } 

} 


} 
+0

这就是它!我发现在将它更改为Student而不是StudentInfo时,我不断收到一些错误,因为我正在使用例如i.getEmail,它将该方法引用为变量而不是i.getEmail()。 – gmart

+0

很高兴为你效劳。不要忘记给予好评太:d Exaxtly左右。省略方法调用中的括号是一个非常常见的编码错误 –