gpt4 book ai didi

java - 错误 : java. util.AbstractList$Itr 无法转换为 ex2.Tuple

转载 作者:行者123 更新时间:2023-12-02 03:52:20 28 4
gpt4 key购买 nike

我的代码中有一个奇怪的错误:

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;

我不明白这个强制转换异常

这是我的完整代码:

问题出在 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;
}

}

最佳答案

替换

Tuple tupleObject = (Tuple)iterator;

Tuple tupleObject = iterator.next();

关于java - 错误 : java. util.AbstractList$Itr 无法转换为 ex2.Tuple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35776396/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com