2 m0 37592628 m0_37592628 于 2017.11.05 09:16 提问

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

最近在有一个专家给项目打分的需求,要求一个专家随机打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();
    }

6个回答

devmiao
devmiao   Ds   Rxr 2017.11.05 10:08

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

qq_32458807
qq_32458807 好复杂啊啊啊啊啊啊啊啊
一天之前 回复
MrLuo93
MrLuo93 回复m0_37592628: 你再设置一个问题然后把c币设置500,链接发给她不就好了?
12 天之前 回复
devmiao
devmiao 回复m0_37592628: 你都不知道怎么追加c币,你前面说回答好的,你可以追加c币,不是骗人么
16 天之前 回复
m0_37592628
m0_37592628 从哪可以追加c币
17 天之前 回复
somerror
somerror   2017.11.07 20:19

数组越界的地方你自己都标注出来了啊,很明显啊
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开始的嘛)

baidu_31235737
baidu_31235737   2017.11.05 12:46

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

Smile_Miracle
Smile_Miracle   2017.11.10 15:04

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

Drizzly_
Drizzly_   2017.11.17 13:48

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 变量的话 推荐 使用

qq_39574690
qq_39574690   2017.11.18 09:33

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

Csdn user default icon
上传中...
上传图片
插入图片