A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一些异常的问题
ArrayIndexOutOfBoundsException
下标越界异常
用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小则抛出次异常。
如下面的例子
数组int[] arr
当你访问arr[-1]  或者访问  arr[arr.length]或者大于arr.length时一定会抛出该异常,出现下标越界的问题


NullPointerException
空指针异常:当指针没有指向任何指向值为空的情况该指针还在用于操作实体就会抛出该异常,如

int[] arr = {1,23,45}
把arr = null;
System.out.println(arr[1]);此时一定会抛出NullPointerException

获取数组中的最大值和最小值的方法 取最值只适合数值型数组
我就拿最小值举例吧
public static int getMin(int []  arr) {
                int min = arr[0];
                for(int i=1;i<arr.length;i++) {
                        if(min>arr[i]) {
                                min = arr[i];
                        }       
                }
                return min;
        }

        public static void main(String[] args) {
                int[] arr  =  {88,65,48,12,1,0,3};
                int min  =  getMin(arr);
                System.out.println("min="+min );
        }


选择排序

public class dfdfd {
        public static void selectsort(int[] arr) {
                for(int i = 0;i<arr.length-1;i++) {
                        for(int j = i+1;j<arr.length;j++) {
                                if(arr[i]>arr[j]) {
                                        int temp = arr[i];
                                        arr[i] = arr[j];
                                        arr[j] = temp;
                                }
                        }
                }
        }
       
        public static void print(int[] arr) {
                for(int i=0;i<arr.length;i++) {
                        System.out.print(arr[i]+",");
                }
        }
       
        public static void main(String[] args) {
                int[] arr = {1,2454,45,6,4,12};
                selectsort(arr);
                print(arr);
        }
}

冒泡排序方法

public class dfdfd {
        public static void bubbleSort(int[] arr) {
                for(int i = 0;i<arr.length-1;i++) {
                        for(int j = 0;j<arr.length-i-1;j++) {
                                if(arr[j]>arr[j+1]) {
                                        int temp = arr[j];
                                        arr[j] = arr[j+1];
                                        arr[j+1] = temp;
                                }
                        }
                }
        }
       
        public static void print(int[] arr) {
                for(int i=0;i<arr.length;i++) {
                        System.out.print(arr[i]+",");
                }
        }
       
        public static void main(String[] args) {
                int[] arr = {1,2454,45,6,4,12,41};
                bubbleSort(arr);
                print(arr);
        }
}

发现上面两种排序无论什么排序都需要对满足条件的元素进行位置的置换所以可以把这部分相同的代码提取出来单独封装成一个函数,
if(arr[j]>arr[j+1]) {
                                        int temp = arr[j];
                                        arr[j] = arr[j+1];
                                        arr[j+1] = temp;
                                }
可以把这两个排序相同的置换方法封装成一个类

public static void swap(int[] arr,int a,int b) {
        if(arr[a]>arr[b]){
                int temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
        }
}



数组中查找问题普通查找
public static void main (String[] args) {
        int [] arr = {1,2,3,54,8,7,6};
        int index = getIndex(arr,54);
        System.out.println(“index=”+index);
}

public static int getIndex(int [] arr, int key) {
        for(int i=1;i<arr.length;i++) {
                if(arr[i]  ==  key) {
                return i;
}
}
return -1;
}

折半查找
第一种方法以要查找的数为条件
public static void main(String[] args) {
                int[] arr = {1,2,5,7,8,15,56};
                int  x = hilfSearch(arr,8);
                System.out.println(x);
        }
       
        public static int hilfSearch(int[] arr, int key) {
                int min = 0;
                int max = arr.length;
                int mid = (min+max)/2;
                while(key != arr[mid]) {
                        if(key > arr[mid]) {
                                min = mid+1;
                        }
                        else if(key<arr[mid]) {
                                max = mid-1;
                        }
                        if(min>max) {
                                return -1;
                        }
                       
                        mid = (min+max)/2;
                       
                }
                return mid;
        }

第二种方法一最大角标和最小角标做条件

public class dfdfd {
        public static void main(String[] args) {
                int[] arr = {1,2,5,7,8,15,56};
                int  x = hilfSearch(arr,56);
                System.out.println(x);
        }
       
        public static int hilfSearch(int[] arr, int key) {
                int min = 0;
                int max = arr.length;
                int mid;
                while (min <= max) {
                        mid = (min+max)/2;
                        if(key>arr[mid]) {
                                min = mid + 1;
                        }
                        else if(key<arr[mid]) {
                                max = mid - 1;
                        }
                        else
                         return mid;
                }
                return -1;
        }
}

十进制转换成2进制
        public static void main(String[] args) {
                toBin(6);
               
        }
       
        public static void toBin(int a) {
                StringBuffer ss = new StringBuffer();
                while(a>0) {
                        ss.append(a%2);
                        a = a/2;
                }
                System.out.println(ss.reverse());
        }

十进制转换成2进制
查表法
public static void main(String[] args) {
                toHex(-6);
        }
       
        public static void toHex(int a) {
                StringBuffer sb = new StringBuffer();
                char[] ch = {'0','1',};
                while(a != 0) {
                        int temp = a&1;
                        sb.append(ch[temp]);
                        a = a >>> 1;
                }
                System.out.println(sb.reverse());
        }


十进制转换成16进制
public class dfdfd {
        public static void main(String[] args) {
                toHex(60);
        }
       
        public static void toHex(int a) {
                StringBuffer ss = new StringBuffer();
                for(int i=1; i<8;i++) {
                        int temp = a&15;
                        if(temp>9) {
                                ss.append((char)(temp-10+'A'));
                        }
                        else {
                                ss.append(temp);
                        }
                        a = a >>> 4;
                }
                System.out.println(ss.reverse());
        }
}

十进制转换成16进制第二种方法
public class dfdfd {
        public static void main(String[] args) {
                toHex(60);
        }
       
        public static void toHex(int a) {
                StringBuffer ss = new StringBuffer();
                        while(a>0) {
                                int temp = a%16;
                                if(a>9) {
                                        ss.append((char)(temp-10+'A'));
                                }
                                else {
                                        ss.append(temp);
                                }
                                a = a/16;
                        }
                System.out.println(ss.reverse());
        }
}

十进制转换成16进制第三种之查表发
public static void main(String[] args) {
                toHex(60);
        }
       
        public static void toHex(int a) {
                StringBuffer sb = new StringBuffer();
                char[] ch = {'0','1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F',};
                while(a != 0) {
                        int temp = a&15;
                        sb.append(ch[temp]);
                        a = a >>> 4;
                }
                System.out.println(sb.reverse());
        }

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

1 个回复

正序浏览
靠 格式怎么还有变了的     复制上面来就变形了  = =  还好变得不是太厉害

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1 你在刷分,哈哈哈。

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马