昨天看了“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循环的时候一定要非常小心的!