2016-03-03 43 views
0

我有我的代碼奇怪的錯誤:

Exception in thread "main" java.lang.ClassCastException: java.util.AbstractList$Itr

cannot be cast to ex2.Tuple at ex2.Main.main(Main.java:142)

因爲在GradeBook類我有這樣的聲明

private ArrayList courseLists;

我不明白這個轉換異常

這裏是我的完整代碼:

親blem是在Main.java線142:

Tuple tupleObject = (Tuple)iterator; 

GradeBook.java:

package ex2; 


import java.util.ArrayList; 


public class GradeBook { 
    private ArrayList<Tuple> courseLists; 

    //final mark for the student 
    private float finalStudentmark; 

    public GradeBook(){ 
     courseLists = new ArrayList<Tuple>(); 
     finalStudentmark = 0; 
    } 

    public ArrayList<Tuple> getCourseLists() { 
     return courseLists; 
    } 

    public void setCourseLists(Tuple t) { 
     this.courseLists.add(t); 
    } 

    public float getFinalStudentmark() { 
     return finalStudentmark; 
    } 

    public void setFinalStudentmark(float finalStudentmark) { 
     this.finalStudentmark = finalStudentmark; 
    } 
} 

Main.java:

package ex2; 


import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.HashSet; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Random; 
import java.util.concurrent.ScheduledThreadPoolExecutor; 

import static java.util.concurrent.TimeUnit.*; 

public class Main { 

    public static void main(String[] args) { 

     //1- create 10 courses 
      Course[] courseLists = new Course[10]; 

      for(int i=0; i<10; i++){ 
       //create 
       Course course = new Course("course"+i, "courseId"+i, "", 60.0f, 0, 0.0f); 
       courseLists[i]=course; 
      } 

     //2- create 7 professors 
      Professor[] professorLists = new Professor[7];  

      Random rand= new Random(); 

      int min=1; 

      int max = 6; 

      for(int i=0; i<7; i++){ 
        //create 
        Professor professor = new Professor("ProfessorFirstName"+i, "ProfessorLastName"+i, 35, "MALE", "adress"+i, "professorId"+i); 

        courseLists[i].setAssignedProfessor("profId"+i); 

        professor.setCourseList(courseLists[i]); 

        professorLists[i] = professor;       
      } 

      rand= new Random(); 
      int randomNum1 = rand.nextInt((max - min) + 1) + min; 
      int randomNum2 = rand.nextInt((max - min) + 1) + min; 

      while (randomNum2 == randomNum1) { 
       randomNum2 = rand.nextInt((max - min) + 1) + min; 
      } 

      courseLists[8].setAssignedProfessor("profId"+randomNum1); 
      professorLists[randomNum1].setCourseList(courseLists[8]); 

      courseLists[9].setAssignedProfessor("profId"+randomNum2); 
      professorLists[randomNum2].setCourseList(courseLists[9]); 

      courseLists[7].setAssignedProfessor("profId"+1); 
      professorLists[1].setCourseList(courseLists[7]); 

      //3- create 30 students 
      Student[] studentsLists = new Student[30]; 

      //-------------------- 
      boolean genderValue; 

      //generate number of courses per student 
      //randomNbrCourses: number of courses taken by the current student 
      for(int i=0; i<30; i++){ 
       int minNbrCourses = 1;    
       int maxNbrCourses = 6;    
       int randomNbrCourses; 
       rand= new Random(); 
       randomNbrCourses = rand.nextInt((maxNbrCourses - minNbrCourses) + 1) + minNbrCourses; 

       //generate random age 
       int minStudentAge=18;   
       int maxStudentAge = 48;   
       int randomAge = -1; 
       rand= new Random(); 
       randomAge = rand.nextInt((maxStudentAge - minStudentAge) + 1) + minStudentAge; 

       //gender 
       genderValue = Math.random() < 0.5;    
       String gender;    
       if (genderValue == false) 
        gender = "FEMALE"; 
       else 
        gender = "MALE"; 

       HashSet<Integer> tempSet; 
       tempSet = new HashSet<Integer>(); 
       GradeBook gradeBook = new GradeBook(); 

       for (int nbrCourse=0; nbrCourse<randomNbrCourses; nbrCourse++) {     

         Tuple tupleValue = new Tuple(); 

         //generate one number , this number correspand to a course id... 
         int randomNumber = rand.nextInt(10); 
         tempSet.add(randomNumber); 

         while (tempSet.contains(randomNumber)) 
          randomNumber = rand.nextInt(10); 

         tempSet.add(randomNumber); 

         courseLists[randomNumber].setNbrEnrolledStudent(1); 

         Random newRand= new Random(); 

         //generate four random marks for the course.... 
         float randomMark1 = newRand.nextFloat()*(100.0f-0.0f) + 0.0f;      
         tupleValue.setMarkExam1(randomMark1); 

         float randomMark2 = newRand.nextFloat()*(100.0f-0.0f) + 0.0f; 
         tupleValue.setMarkExam2(randomMark2); 

         float randomMark3 = newRand.nextFloat()*(100.0f-0.0f) + 0.0f; 
         tupleValue.setMarkExam3(randomMark3); 

         float randomMark4 = newRand.nextFloat()*(100.0f-0.0f) + 0.0f; 
         tupleValue.setMarkExam4(randomMark4); 

         tupleValue.setFinalMark((randomMark1+randomMark2+randomMark3+randomMark4)/4); 

         tupleValue.setCourseName("course"+randomNumber); 

         tupleValue.setCourseId("courseId"+randomNumber);      

         gradeBook.setCourseLists(tupleValue);     
        } 

       Student student = new Student("firstName_student"+i, "lastName_student"+i, randomAge, gender, "adress"+i, "idStudent"+i, null ,gradeBook); 

       //for quick access, add courses ids 
       Iterator<Tuple> iterator = (Iterator<Tuple>) gradeBook.getCourseLists().iterator(); 
       while (iterator.hasNext()) { 
        Tuple tupleObject = (Tuple)iterator;     
        student.getCourseLists().add(tupleObject.getCourseId()); 
       } 

       studentsLists[i]=student; 

       studentsLists[i].setNbrCourses(randomNbrCourses); 
      } 

      //we have to verify that there is no course with less than 3 student enrolled 


      //create the admin thread 

      //1- create a schedule for the exam 
       HashMap<String, float[]> examScheduleMap; 
       examScheduleMap = new HashMap <String, float[]>(); 

       //ExamSchedule eSchedule = new ExamSchedule(); 

       Thread examSchedTh = new Thread(new ExamSchedule(examScheduleMap, courseLists)); 
       examSchedTh.start(); 

       try { 
        examSchedTh.join(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       //using thread pool and scheduler for students 

       // 1- thread pool 

       ScheduledThreadPoolExecutor eventPool = new ScheduledThreadPoolExecutor(30); 

       for (int j=0;j<30;j++) 
        eventPool.schedule(new StudentThread(courseLists, studentsLists, j), 0, SECONDS); 

       //for (int i=0; i<30;i++) 
       // thPoolStudent[i] = new Thread(new StudentThread(courseLists)); 
       //th1.start(); 

       //wait for the exam period 


      //print the list of courses 
      getWholeCouces(courseLists, studentsLists); 

      //print the professors and there assigned courses 
      getProfessorsAndAssignedCouces(professorLists); 

      //print the list of all students and the courses enrolled in 
      getStudentsWithEnrolledCourses(studentsLists); 

    } 
    /* 
    static float getMinMarkCourse(){ 

    } 

    static float getMaxMarkCourse(){ 

    } 

    static float getGroupMarkCourse(){ 

    }*/ 

    //method to print the list of all students and the courses they are enrolled in 
    static void getStudentsWithEnrolledCourses(Student[] student){ 
     System.out.println(" "); 
     System.out.println("----------------------------------------------------------"); 
     System.out.println("list of all students and the courses they are enrolled in:"); 
     System.out.println("----------------------------------------------------------"); 
     for (int i=0; i<30;i++){ 
      System.out.print(student[i].getLastName()); 
      System.out.print(" "+student[i].getIdentificationNumber()); 

      GradeBook gb = student[i].getGradeBook(); 

      ArrayList<Tuple> tuple = gb.getCourseLists(); 

      for (int L=0; L< tuple.size(); L++) 
      { 
       System.out.println(" "); 
       System.out.print(" "+tuple.get(L).getCourseId()); 
       System.out.print(" "+tuple.get(L).getFinalMark()); 
      } 
      System.out.println(" "); 
      System.out.println(" "); 
     } 



    } 


    //method to get the professors and there assigned courses 
    static void getProfessorsAndAssignedCouces(Professor[] professor){ 
     System.out.println(" "); 
     System.out.println("---------------------------------------"); 
     System.out.println("professors and there assigned courses:"); 
     System.out.println("---------------------------------------"); 
     for(int i=0; i<7; i++){ 
       System.out.println(" "); 
       System.out.print(professor[i].getFirstName()); 

       System.out.print(" "+professor[i].getIdentificationNumber()); 
       System.out.println(" "); 

       System.out.println(" "); 
       List<Course> courseList = professor[i].getCourseList(); 

       for (int k=0; k < courseList.size(); k++){ 
        System.out.print(" "+courseList.get(k).getCourseId()); 
        System.out.print(" "+courseList.get(k).getNbrEnrolledStudent()); 
        System.out.print(" "+courseList.get(k).getAverageCourseMark()); 
        System.out.println(" "); 
       } 
       System.out.println(" "); 
     } 
    } 

    //method to get the list of all courses 
    static void getWholeCouces(Course[] courseList,Student[] studentsList){ 
     System.out.println("----------------"); 
     System.out.println("list of courses:"); 
     System.out.println("----------------"); 
     // maxMark = max mark of the course 
     // minMark = minimum mark of the course 
     float maxMark = Float.MIN_VALUE; 
     float minMark = Float.MAX_VALUE; 

     float allMarks = 0.0f; 
     float nbOfEnrolledStudent=0.0f; 

     for(int i=0; i<10; i++){ 
       //create 
       String courseName = courseList[i].getCourseName(); 

       //look for enrolled student 
       for(int nbStudent=0; nbStudent<30; nbStudent++){ 
        ArrayList<Tuple> temp = studentsList[nbStudent].getGradeBook().getCourseLists(); 
        for (int j=0;j< temp.size();j++){ 
         if (temp.get(j).getCourseName().equals(courseName)){ 
          if (temp.get(j).getFinalMark() > maxMark) 
           maxMark = temp.get(j).getFinalMark(); 

          if (temp.get(j).getFinalMark() < minMark) 
           minMark = temp.get(j).getFinalMark(); 

          allMarks += temp.get(j).getFinalMark(); 
          nbOfEnrolledStudent+=1; 
         } 
        } 
       } 

       courseList[i].setAverageCourseMark((allMarks)/nbOfEnrolledStudent); 

       System.out.print(courseName); 
       System.out.print(" "+courseList[i].getCourseId()); 
       System.out.print(" "+courseList[i].getAssignedProfessor()); 
       System.out.print(" "+courseList[i].getNbrEnrolledStudent()); 
       System.out.print(" "+minMark); 
       System.out.print(" "+maxMark); 
       System.out.print(" "+(allMarks)/nbOfEnrolledStudent); 
       System.out.println(" "); 
     } 
    } 
} 

Tuple.java:

package ex2; 


public class Tuple{ 

    private String courseName; 

    private String courseId; 

    private float markExam1; 

    private float markExam2; 

    private float markExam3; 

    private float markExam4; 

    private float finalMark; 

    //default constructor 
    public Tuple(){ 
     super(); 
     courseName = ""; 

     courseId = ""; 

     markExam1 = 0; 

     markExam2 = 0; 

     markExam3 = 0; 

     markExam4 = 0; 

     finalMark = 0; 
    } 

    public String getCourseId() { 
     return courseId; 
    } 

    public void setCourseId(String courseId) { 
     this.courseId = courseId; 
    } 

    public Tuple(String courseName, String courseId, float markExam1, float markExam2, float markExam3, float markExam4, float finalMark) { 
     this.courseName = courseName; 
     this.courseId = courseId; 
     this.markExam1 = markExam1; 
     this.markExam2 = markExam2; 
     this.markExam3 = markExam3; 
     this.markExam4 = markExam4; 
     this.finalMark = finalMark; 
    } 

    public String getCourseName() { 
     return courseName; 
    } 


    public void setCourseName(String courseName) { 
     this.courseName = courseName; 
    } 


    public float getMarkExam1() { 
     return markExam1; 
    } 


    public void setMarkExam1(float markExam1) { 
     this.markExam1 = markExam1; 
    } 


    public float getMarkExam2() { 
     return markExam2; 
    } 


    public void setMarkExam2(float markExam2) { 
     this.markExam2 = markExam2; 
    } 


    public float getMarkExam3() { 
     return markExam3; 
    } 


    public void setMarkExam3(float markExam3) { 
     this.markExam3 = markExam3; 
    } 


    public float getMarkExam4() { 
     return markExam4; 
    } 


    public void setMarkExam4(float markExam4) { 
     this.markExam4 = markExam4; 
    } 


    public float getFinalMark() { 
     return finalMark; 
    } 


    public void setFinalMark(float finalMark) { 
     this.finalMark = finalMark; 
    } 

} 
+0

替換爲'Tuple t = iterator.next()' –

+0

用你的指令替換什麼? – HDJEMAI

+0

您嘗試將迭代器分配給它應該返回的項目。 –

回答

1

更換

Tuple tupleObject = (Tuple)iterator; 

Tuple tupleObject = iterator.next(); 
1

你不能投的迭代器的元組。改爲使用迭代器上的下一個方法:

while (iterator.hasNext()) { 
    Tuple tupleObject = iterator.next();     
    student.getCourseLists().add(tupleObject.getCourseId()); 
} 
相關問題