日期:2014-05-20  浏览次数:20727 次

犯这样的错误,算是缺钙还是缺铁?

昨天看了“java数据结构和算法”数组的二分查找,今天复习,自己敲代码,老是死循环。
结果,调试了半天,下面加注释的地方,就是出错的地方。贴上留念!

Java code
class DataArray01 {

    private long[] arr;
    private int elements;

    public DataArray01(int max) {
        arr = new long[max]; // 这里忘记语法了!
        elements = 0;
    }

    /**
     * find 方法
     * @param search
     * @return
     */
    public int find(long search) {
        int minbound = 0;
        int maxbound = elements - 1;

        while (true) {
            /* 下面这句一定要写在while内部  */
            int curin = (minbound + maxbound) / 2;
            
            if (arr[curin] == search) {
                return curin;
            } else if (minbound > maxbound) {
                return elements;
            } else {
                /* 注意这里不能写成  search > curin */
                if (search > arr[curin]) {
                    minbound = curin + 1;
                } else {
                    maxbound = curin - 1;
                }
            }
        }
    }
    
    /**
     * insert 方法
     * @param data
     */
    public void insert(long data){
        int j ;
        /* 注意不能写成 j<elements-1 */
        for(j=0;j<elements;j++){
            if(arr[j] > data) break ;
        }
        for(int k=elements;k>j;k--){
            arr[k] = arr[k-1] ;
        }
        arr[j] = data ;
        elements++;
    }

    public boolean delete(long data){
        boolean flag = false ;
        int j = find(data) ;
        if(j < elements){
            for(int i=j;i<elements;i++){
                arr[i] = arr[i+1];
            }
            elements-- ;
            flag = true ;
        }
        
        return flag ;
    }
    /**
     * display 方法
     * @return
     */
    public String display(){
        StringBuilder arrStr = new StringBuilder();
        /* 这里不能写成 i<elements-1 ,否则最后一个元素永远也取不到! */
        for(int i=0;i<elements;i++){
            arrStr.append(arr[i]);
            if(i == elements-1){
                arrStr.append(" .");
            }else{
                arrStr.append(" ,");
            }
        }
        return arrStr.toString() ;
    }
    
    public int size(){
        return elements ;
    }
}

public class ErFenChaZhao {
    public static void main(String[] args) {
        DataArray01 arr = new DataArray01(100);
        arr.insert(100);
        arr.insert(69);
        arr.insert(34);
        arr.insert(98);
        arr.insert(120);
        arr.insert(500);
        arr.insert(22);
        arr.insert(33);
        arr.insert(99);
        arr.insert(77);
        arr.insert(44);
        arr.insert(11);
        System.out.println(arr.display());
        if(arr.delete(34))
            System.out.println(arr.display());
        if (arr.delete(22))
            System.out.println(arr.display());
        if(arr.find(500) < arr.size())
            System.out.println("find 500");
    }
}


------解决方案--------------------
都缺!
------解决方案--------------------
缺吃核桃~~
------解决方案--------------------
补补更健康
------解决方案--------------------
脑袋进水了, 嘻嘻。。。。。
------解决方案--------------------
用while循环的时候一定要非常小心的!