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]);//这里标记为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);
}
解决方案 »
- [小白求教]学校留的作业 遇到点问题
- ==和equals的区别具体解释!
- 空的工程加入struts2的问过滤器之后访问报404
- 求JavaMail源代码文件
- 什么方式生成的主键可以避免不同的会话插入数据时导致关键字重复?
- 请教分页问题(关于分页表数据实时变化)
- <JSP:useBean...使用问题.....很急的!!!在线等!!!感激不尽!!
- 高手指点:用jbuilderX打开struts-logic.tld、struts-html.tld和struts-bean.tld是出现乱码,怎么解决?
- 60分求答案
- 两个数据库,进行定时数据同步
- Tomcat坑我千百遍 我却待它如初见 配置好了也是开不了index
- WebService报错,求大神
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]不就下标越界了吗,肯定会报数组下标越界异常啊。
你就直接传下标吧,不要传下标取的数了。
你把你的数组换成乱序的大一点的随机数,自己想一下就清楚了。