当前位置: 代码迷 >> J2EE >> java,调试了一天了
  详细解决方案

java,调试了一天了

热度:35   发布时间:2016-04-17 23:42:54.0
求救java,调试了一天了
public class Appliation {
public static void main(String agrs[]){
int a[]={1,2,3,4,5,6,7,8,9};
perm(a,0,a.length-1);
}
public static void perm(int []a,int left,int right){
if(left==right){
int x,y,z;
x=100*a[0]+10*a[1]+a[2];
y=100*a[3]+10*a[4]+a[5];
z=100*a[6]+10*a[7]+a[8];
if(x+y==z){
System.out.println(x+"+"+y+"="+z);
}
}
else 
for(int i=left;i<=right;i++){
Swap(a,a[left],a[i]);
perm(a,left+1,right);
Swap(a,a[left],a[i]);
}
}
 static  void Swap(int a[],int m,int n){
int item;
item=a[m];
a[m]=a[n];
a[n]=item;
}
}

------解决思路----------------------
else 
        for(int i=left;i<=right;i++){
        Swap(a,a[left],a[i]);//这里标记为1状态
        perm(a,left+1,right);//这里标记为2状态,这里典型的下标越界
        Swap(a,a[left],a[i]);//这里标记为3状态
        }
你的本意是想将数组中的值进行交换是吧?但是for循环执行状态1,这里就成了 m=a[left],
n=a[i],然后再进行交换item=a[m]=a[a[left]]这里就明显有问题了,不是你想要交换的数组的值了
这是将数值的下标值和数组的值进行交换了,数组的值最大为9,明显超出了这个数组的下标值,
所以会出现下标越界
我把以上改成这样 就能运行了
else
for (int i = left; i <= right; i++) {
Swap(a, left, i);
perm(a, left + 1, right);
Swap(a, left, i);
}
------解决思路----------------------

for(int?i=left;i<=right;i++){
????????Swap(a,a[left],a[i]);
????????perm(a,left+1,right);
????????Swap(a,a[left],a[i]);
????????}

当i为数组最后一个数时,此时的a[i] = 9; 而你此时传到这个方法

Swap(int a[],int m,int n)
时,n就成为9了,而你a[m]=a[n];,此时a[9]不就下标越界了吗,肯定会报数组下标越界异常啊。
你就直接传下标吧,不要传下标取的数了。
你把你的数组换成乱序的大一点的随机数,自己想一下就清楚了。
  相关解决方案