android java 数组越界

--家贼王--- 发布于 2016/07/05 11:32
阅读 214
收藏 0
public class Straight {
    public static void main(String[] args) {
        int a[] = {4,2,1,8,6,7,9,5};
        insertSort(a,8);
    }

    public static void insertSort(int a[], int n) {  
        for (int i = 1; i < n; i++) {  
            if (a[i] < a[i-1]) {   //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入  
                int j = i-1;  
                int x = a[i];      //复制为哨兵,即存储待排序元素  
                a[i] = a[i-1];     //先后移一个元素  
                while (x < a[j]) { //查找在有序表的插入位置  
                    a[j+1] = a[j];  
                    j--;           //元素后移  
                }  
                a[j+1] = x;        //插入到正确位置  
            }  
            print(a,8,8);              //打印每趟排序的结果  
       }  
    }

    public static void print(int a[], int n, int i) {
        for (int j = 0 ; j < 8; j++) {
            System.out.println("a[j] = " + a[j]);
        }
    }

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
    at Straight.insertSort(Straight.java:13)
    at Straight.main(Straight.java:4) 

请问如何解决??? 谢谢!!

加载中
0
nesger
nesger
debug跟踪一下就知道具体在哪里越界了。这里已经明确说明是insertSort方法的第13行了
nesger
nesger
回复 @--家贼王--- : 你在while结束(即花括号前)打印下j的值。这样就可以看到a[j]各个值了。如果出现j小于0或者大于7,就是有问题。
--家贼王---
--家贼王---
说的是下边这行 while (x < a[j]) { //查找在有序表的插入位置
0
冷酷到底cool
冷酷到底cool
你这是自己练习用的吗?要不是,就用List吧
--家贼王---
--家贼王---
对 就是试一试代码 报的是这边的错误(越界): while (x < a[j]) { //查找在有序表的插入位置
0
Mr_K
Mr_K
while (x < a[j]) { //查找在有序表的插入位置  
         a[j+1] = a[j];  
         j--;           //元素后移  
 }

这里有问题~

当x = 2 也就是 i =1的时候,j=0,a[j] = 4的时候,

while (x < a[j])
则为tru,j--就为-1了,a[j]肯定就报错了~


0
--家贼王---
--家贼王---

引用来自“Mr_K”的评论

while (x < a[j]) { //查找在有序表的插入位置  
         a[j+1] = a[j];  
         j--;           //元素后移  
 }

这里有问题~

当x = 2 也就是 i =1的时候,j=0,a[j] = 4的时候,

while (x < a[j])
则为tru,j--就为-1了,a[j]肯定就报错了~


while (x < a[j]) { //查找在有序表的插入位置  
         a[j+1] = a[j];  
         j--;           //元素后移  
 }

这里有问题~

当x = 2 也就是 i =1的时候,j=0,a[j] = 4的时候,

while (x < a[j])
则为tru,j--就为-1了,a[j]肯定就报错了~


请输入你的答案内容:


返回顶部
顶部