在线等,着急,项目与专家实现9v9的关系,若有的好的方法可以追加500C币

最近在有一个专家给项目打分的需求,要求一个专家随机打9个项目,一个项目随机被9个专家打,业务规则如下(专家不能给本部门发起的项目和合作单位发起的项目打分),
如:
项目GGGG是A部门申请的,合作单位是B,C,D,那么A、B、C、D部门的专家不能给项目GGG打分。
1、项目和专家的个数一致的 。
2、部门申请的项目总数和部门的专家数是一样的。
下边是小弟写的代码,老是爆数组越界错误。
List businessDataList=(List)argMap.get("businessDataList");
Map expertMap=new HashMap();
Map userCodeMap=new HashMap();

    try {
        y:for (int i = 0; i <= businessDataList.size(); i++) {
            TPairJudgeBusinessData businessData=businessDataList.get(i);
            List<TPairJudgeExpeortRelation> relations=this.getPairJudgeDDao().queryAllExpeortRelation(businessData.getPairJudgeId());

// List expertList = this.getPairJudgeDDao().findExpertcodeByorgname("", "");//所有专家
List expertList = this.getPairJudgeDDao().findExpertcodeByorgname("", businessData.getDeclareDeptName());//所有专家
int count=0;//记录项目拥有的专家数[虞春明, 网运中心, 13901346687, ycm]
n:for (Object obj : expertList) {
Object[] tExpertInfo = (Object[])obj;
int sumexpert = this.getPairJudgeDDao().findPairJudgeScore(tExpertInfo[3].toString(),businessData.getProcessId());//查询专家拥有的项目数
System.out.println("专家有的项目的总数:"+sumexpert);

                //判断专家是否拥有9个项目
                if(sumexpert==9){
                    continue n;
                }

// //判断专家和项目是否是同部门或者合作部门
if(businessData.getFinishDeptName().indexOf(tExpertInfo[1].toString())!=-1){
continue n;
}
//判断项目是否有9个专家
int countexpert = this.getPairJudgeDDao().findPairJudgeScoreByJudgeId(businessData.getPairJudgeId(),businessData.getProcessId());//查询专家拥有的项目数
System.out.println("项目有的专家数:"+countexpert);
if(countexpert==9 && sumexpert==9){
continue y;
}
// if(count==9){
// continue y;
// }
if (sumexpert<=9) {
TPairJudgeScore pairJudgeScore=new TPairJudgeScore();
pairJudgeScore.setProcessId(businessData.getProcessId());
pairJudgeScore.setPairFirstJudgeId(ObjectUtils.toString(businessData.getId(),""));
pairJudgeScore.setPairjudgeName(businessData.getPairJudgeName());
pairJudgeScore.setPrizeLevel("");
pairJudgeScore.setMarkerDate(new Date(System.currentTimeMillis()));
pairJudgeScore.setMarkerCode(tExpertInfo[3].toString());
pairJudgeScore.setMarker(tExpertInfo[0].toString());
pairJudgeScore.setPairJudgeId(ObjectUtils.toString(businessData.getPairJudgeId(),""));
if ("成果应用奖 ".equals(businessData.getDeclarePrize())) {
pairJudgeScore.setPairJudgeType("1");
}else if("科技进步奖".equals(businessData.getDeclarePrize())){
pairJudgeScore.setPairJudgeType("2");
}else{
pairJudgeScore.setPairJudgeType("3");
}
pairJudgeScore.setDeclarePrize(businessData.getDeclarePrize());
pairJudgeScore.setType("0");
this.getPairJudgeDDao().insertIntoJudgeScore(pairJudgeScore);
count++;
}

            }

        }
    } catch (Exception e) {
        System.out.println("1111111111111111111");
        e.printStackTrace();
    }

你先加上500C。我先回答这么多,若追加的多,可以进一步回答。

每个项目看成一个对象,对象属性包含与对象有关联的专家集合或数组。用一个集合装所有项目对象。用random去取项目内容,但是同一个专家随机数不能重复,所以可以先用条件语句选出9个数,要注意随机数不能大于数组长度。。。

数组越界的地方你自己都标注出来了啊,很明显啊
for (int i = 0; i <= businessDataList.size(); i++) ————————这句话,改成
for (int i = 0; i < businessDataList.size(); i++)
原因
比如你的size是8,那你的索引应该是0-7,找到索引8就会报错越界。
你下面执行了businessDataList.get(i); 那就是说,当i等于size()时会出现get到了第i+1个值(因为是从0开始的嘛)

先说一下部门和专家之间的关系,一对多还是多对多,这个关系不确定如何写

for (int i = 0; i <= businessDataList.size(); i++) 这里越界是一定的,下标识 0 -》( size-1) 如果到size的话 一定是越界的
改成
for (int i = 0; i < businessDataList.size(); i++)
或者
for(TPairJudgeBusinessData businessData:businessDataList ) 增强for循环 比较简洁。不需要 i 变量的话 推荐 使用

检查所有循环语句,仔细地看看是否有哪里会越界,第二看看是否出现了某个地方改了数组大小或者是循环语句中的循环变量。
仔细检查循环变量最大上限是多少,是不是最大上限你设置的本身就是越界的问题。

for (int i = 0; i <= businessDataList.size(); i++) 这里越界是了,下标识 0 开始,到size-1结束,所以应该
改成
for (int i = 0; i < businessDataList.size(); i++)
或者
for (int i = 0; i <= businessDataList.size()-1; i++)