public double HCRR(Instances train,Classifier[] cfsArray,List<Integer>[] classifyResult,List<Double> correctRateArray,double initCorrectRate,List<Double> currentResult,List<Integer> ClassifierNo){
		double diversity;//差异性（差异性度量是κ度量，κ值越小，差异性越大）
		double tempDiversity;
		double correctRate;//正确率
		double voteCorrectRate;//vote集成得到的正确率
		//
		int count=cfsArray.length;//循环次数(循环次数为分类器的个数)
		int i=0,j,k;
		int r;
		int maxNo;
		Random random=new Random();
		//如果列表为空，说明是第一轮循环，那么就将正确率最高的分类器选为第一个分类器,否则就只要将正确率替换成前一轮循环得到的正确率
		if (ClassifierNo.size() == 0) {
			//
			diversity=currentResult.get(0);
			//
			if (bestBegin == false) {
				r = random.nextInt(cfsArray.length);
				correctRate = correctRateArray.get(r);
				ClassifierNo.add(r);
			} else {
				correctRate = Collections.max(correctRateArray);
				maxNo = correctRateArray.indexOf(correctRate);
				ClassifierNo.add(maxNo);
			}
		} else {
			diversity=currentResult.get(0);
			correctRate=currentResult.get(1);
		}
		//
		while (i < count) {
			//
			if (correctRate >= initCorrectRate) {
				break;
			} else {
				// 随机产生一个分类器的编号，然后将得到该分类器和之前选择的分类器的分类结果一起计算差异性
				r = random.nextInt(cfsArray.length);
				List<Integer>[] tempList = new List[ClassifierNo.size() + 1];
				for (k = 0; k < ClassifierNo.size(); k++) {
					tempList[k] = classifyResult[ClassifierNo.get(k)];
				}
				tempList[ClassifierNo.size()] = classifyResult[r];
				tempDiversity = CalculateK(tempList);
				// κ度量的值越小，说明差异性越大
				if (tempDiversity <= diversity) {
					//
					ClassifierNo.add(r);
					//
					Classifier[] newCfsArray = new Classifier[ClassifierNo.size()];
					//
					for (j = 0; j < newCfsArray.length; j++) {
						newCfsArray[j] = cfsArray[ClassifierNo.get(j)];
					}
					//
					voteCorrectRate = ensembleVote(train, /* test, */newCfsArray);
					// 如果当前集成得到的正确率比之前的正确率高，那么就将差异性和正确率替换成该轮的值，否则将最后一个分类器编号删除(新加的分类器编号)
					if (voteCorrectRate > correctRate) {
						diversity = tempDiversity;
						correctRate = voteCorrectRate;
						setBestMatrixString(tempMatrixString);
						setBestClassDetailsString(tempClassDetailsString);
					} else {
						ClassifierNo.remove(ClassifierNo.size() - 1);
					}
				}
				i++;
			}
		}
		// 说明只有一个分类器，差异性为0
		if (diversity == Double.MAX_VALUE) {
			diversity = 0;
		}
		//对于循环集成，每一次循环结束必须记录当前的差异性、正确率和所选分类器个数，对于所选择的分类编号训练由ClassifierNo保存
		currentResult.clear();
		currentResult.add(diversity);
		currentResult.add(correctRate);
		currentResult.add((double)ClassifierNo.size());
		
		return correctRate;
	}