package test;public class BeibaoDemo {
static int a[]=new int[7];
static int b[]=new int[7];
static int flag=0;
static int bound=17;
static int totle=0; /**
* @param args
*/
public static void inserttry(int i,int leftbound,int t){
if(i<7&&leftbound<=totle){
if(a[i]<leftbound){
b[t++]=a[i];
leftbound=leftbound-a[i];
totle=totle-a[i];
i++;
inserttry(i,leftbound,t);
}else if(a[i]>leftbound){
totle=totle-a[i];
i++;
inserttry(i,leftbound,t);
}else{
b[t]=a[i];
return;
}
}else{
leftbound=leftbound+b[--t];
for(int f=0;f<7;f++){
if(a[f]==b[t]){
flag=++f;
break;
}
}
b[t]=0;
totle=0;
for(int m=flag;m<7;m++)
totle=totle+a[m];
inserttry(flag,leftbound,t);
}
return;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
a=new int[]{14,26,5,30,0,-2,108};
for(int i=0;i<7;i++)
b[i]=0;
for(int i=0;i<7;i++)
totle+=a[i];
inserttry(0,17,0);
for(int i=0;i<b.length;i++)
System.out.print(b[i]+" "); }}
=============
抛出的异常Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at test.BeibaoDemo.inserttry(BeibaoDemo.java:30)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.main(BeibaoDemo.java:52)
static int a[]=new int[7];
static int b[]=new int[7];
static int flag=0;
static int bound=17;
static int totle=0; /**
* @param args
*/
public static void inserttry(int i,int leftbound,int t){
if(i<7&&leftbound<=totle){
if(a[i]<leftbound){
b[t++]=a[i];
leftbound=leftbound-a[i];
totle=totle-a[i];
i++;
inserttry(i,leftbound,t);
}else if(a[i]>leftbound){
totle=totle-a[i];
i++;
inserttry(i,leftbound,t);
}else{
b[t]=a[i];
return;
}
}else{
leftbound=leftbound+b[--t];
for(int f=0;f<7;f++){
if(a[f]==b[t]){
flag=++f;
break;
}
}
b[t]=0;
totle=0;
for(int m=flag;m<7;m++)
totle=totle+a[m];
inserttry(flag,leftbound,t);
}
return;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
a=new int[]{14,26,5,30,0,-2,108};
for(int i=0;i<7;i++)
b[i]=0;
for(int i=0;i<7;i++)
totle+=a[i];
inserttry(0,17,0);
for(int i=0;i<b.length;i++)
System.out.print(b[i]+" "); }}
=============
抛出的异常Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at test.BeibaoDemo.inserttry(BeibaoDemo.java:30)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:41)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:24)
at test.BeibaoDemo.inserttry(BeibaoDemo.java:20)
at test.BeibaoDemo.main(BeibaoDemo.java:52)
import java.util.*;public class CombinationDemo { /**
* @param args
*/
public static int[] toArray(int arr[],int m){
int []array=new int[m];
int j=0;
for(int i=0;i<arr.length;i++){
if(arr[i]==1){
array[j]=i+1;
j++;
}
}
return array;
}
public static List<int[]> combination(int m){
List<int []> list=new ArrayList<int []>();
int arr[]=new int[5];
for(int i=0;i<m;i++)
arr[i]=1;
for(int i=m;i<arr.length;i++)
arr[i]=0;
int array[]=toArray(arr,m);
list.add(array);
for(int i=0;i<arr.length-1;i++){
if(arr[i]==1&&arr[i+1]==0){
arr[i]=0;
arr[i+1]=1;
array=toArray(arr,m);
list.add(array);
i=-1;
}
}
return list;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List<int []> list=new ArrayList<int []>();
list=combination(3);
Iterator it=list.iterator();
while(it.hasNext()){
int[] arr=(int [])it.next();
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
System.out.println();
} }}
static int[] a = new int[5]; // 背包重量
static int[] b = new int[5]; // 结果数组
static int flag = 0; // 下一个候选项
static int bound = 20; // 总重量
static int totle = 0; // 每次选择后的总重量
/**
* 背包
*
* @param i
* 元素坐标
* @param leftbound
* 目标重量
* @param t
*/
public static void inserttry(int i, int leftbound, int t){
if (i < 5 && leftbound <= totle) {
if (a[i] < leftbound) { // 当前的所选的数小于已选数的总和,将当前所选的数放入结果数组,从目标重量减掉当前所选数,递归,选择后的重量数减掉当前所选数
b[t++] = a[i];
totle = totle - a[i];
leftbound = leftbound - a[i];
i++;
inserttry(i, leftbound, t);
} else if (a[i] > leftbound) { // 当前的所选的数大于已选数的总和,不符合条件,选择后的重量数减掉当前所选数,递归
totle = totle - a[i];
i++;
inserttry(i, leftbound, t);
} else { // 当前所选的数等于已选数的总和
b[t] = a[i];
return;
}
} else { // 数组中没有符合当前条件的元素,将前一个数值移除,递归
leftbound = leftbound + b[--t];
for (int f = 0; f < 5; f++) {
if (a[f] == b[t]) {
flag = ++f;
break;
}
}
b[t] = 0;
totle = 0;
for (int m = flag; m < 5; m++) {
totle += a[m];
}
inserttry(flag, leftbound, t);
}
return;
}
public static void main(String[] args) {
a[0] = 11;
a[1] = 8;
a[2] = 6;
a[3] = 7;
a[4] = 5;
for (int i = 0; i < 5; i++) {
b[i] = 0;
}
for (int i = 0; i < 5; i++) {
totle += a[i];
}
inserttry(0, 20, 0);
for (int i = 0; i < 5; i++) {
System.out.println(b[i]);
}
}
}
这个跟我的除了把5改为7,都没变,为什么我的会报越界异常?