code: public static void forEachIndex(short[] input,boolean[] inputSkip,int[] output ,int outPutIndex,ForEachIndexController controller)
  	{
  		for(int i=0;i<input.length;i++)
  		{
  			if(inputSkip[i])
  			{
  				continue;
  			}
  			output[outPutIndex]=i;//输出当前位锁定值
  			ComputeStatus status=controller.onOutEvent(output, outPutIndex);
  			if(status.isStop())
  			{
  				return;
  			}
  			if(status.isSkip())
  			{//跳过下层循环
  				continue;
  			}
  			outPutIndex++;
  			if(outPutIndex>=input.length)
  			{//如果是最后一个则返回
  				break;
  			}
  			//解锁下一个
  			inputSkip[i]=true;//锁定当前位占用索引,其它位不可使用该索引
  			forEachIndex(input, inputSkip, output, outPutIndex,controller);
  			outPutIndex--;//回到当前
  			inputSkip[i]=false;//释放锁定
  		}
  	}
docs: 遍历short数组元素索引排列组合情况
  @param input
  @param inputSkip
  @param output
  @param outPutIndex
  @param controller