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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李培根 金牌黑马   /  2012-12-8 15:48  /  1090 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

数组两种定义格式:
第一种定义格式:(需要一个容器,但是不明确容器的具体数据)                //        元素类型 [] 数组名 = new 元素类型[元素个数或数组长度];
                int[] arr = new int[3];
                arr[0]= 8;
                System.out.println(arr[0]);
               
第二种定义格式:(需要一个容器,存储已知的具体数据)
        元素类型 [] 数组名 = new 元素类型[]{元素,元素……};
                int[] arr = new int [] {1,34,56};
                int[] arr ={1,34,56};
               
        数据一多就要用数组存。
数组:常见问题
                int[] arr = new int[3];
                System.out.println(arr[3]);//ArrayIndexOutOfBoundsException
                当访问到数组中不存在的角标时,就会发生数组角标越界异常
       
                arr = null;
                System.out.println(arr[0]);//NullPointException
                当引用型变量没有任何实体指向时,还在用其操作实体就会引发该异常。
数组常见操作:1遍历。
        //对数组最基本的操作就是存和取,核心思想就是对角标的操作。
                int[] arr = new int []{1,34,56,78};
                System.out.println("length:"+arr.length);
                for (int i = 0; i < arr.length; i++) {
                        System.out.println("arr["+i+"]="+arr+";");
                }
               
                for (int i = 0; i < arr.length; i+=2) {//取偶数角标
                        System.out.println("arr["+i+"]="+arr+";");
                }*/
               
               
数组常见操作:2获取最值
                /*思路:
                1、需要进行比较,并定义变量记录每次比较后较大的值。
                2、遍历数组,和比昂两中记录的元素进行比较。
                3、遍历结束,该变量记录的就是最大值。
                定义一个功能来实现。*/
               
                int[] arr = new int []{1,34,56,78,3};
               
                System.out.println(getMax2(arr));
        }
        public static int getMax(int[] arr) {
                int maxElement = arr[0];       
                for (int i = 1; i < arr.length; i++) {
                        if(arr>maxElement)
                                maxElement = arr;
                }
                return maxElement;
        }
       
       
        public static int getMax2(int[] arr) {
                int maxIndex = 0;       
                for (int i = 1; i < arr.length; i++) {
                        if(arr>arr[maxIndex])
                                arr[maxIndex] = arr;
                }
                return arr[maxIndex];
        }
数组常见操作:3排序
3.1选择排序
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[j]<arr){                                       
                                        int temp = arr;
                                        arr = arr[j];
                                        arr[j] = temp;
                                }                                       
                        }                       
                }
        }
3.2冒泡排序
private static void bubbleSort(int[] arr) {
                for (int i = 0; i < arr.length-1; i++) {
                        for (int j = 0; j < arr.length-1-i; j++) {//-1避免角标越界        -i为了外循环增加一次内循环参与比较的元素个数递减
                                if(arr[j]>arr[j+1]){
                                int temp = arr[j];
                                arr[j] = arr[j+1];
                                arr[j+1] = temp;                               
                                }                               
                        }               
                }
        }
排序性能小练习
public class ArrayDemoXingNeng {
//        排序性能练习
//                使用变量记住最小的元素和角标,遍历一遍后进行一次换位
       
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int[] arr = new int [] {1,2,59,68,38,74};
               
                for (int i = 0; i < arr.length-1; i++) {               
                        int num = arr;
                        int index = i;
                        for (int j = i+1; j < arr.length; j++) {
                                if(num>arr[j]){
                                        num = arr[j];
                                        index = j;
                                }                       
                        }
                        if(index!=i){
                                swap(arr,i,index);
                        }
                }               
               
                for (int i = 0; i < arr.length; i++) {
                        System.out.print(arr+",");
                }               
        }
        private static void swap(int[] arr, int i, int j) {
                int temp = arr;
                arr = arr[j];
                arr[j] = temp;
        }       
}
数组常见操作:4、查找
如果查找的元素在数组中存在多个,会返回第一个的index
               
//普通查找
        public static int getIndex(int[] arr, int key){
               
                for (int i = 0; i < arr.length; i++) {
                        if(key==arr)
                                return i;
                }
                return -1;
        }
//折半查找(二分查找)必须是有序的数组
                public static int binarySearch(int[] arr,int key){
                        int max,min,mid;
                        min = 0;
                        max = arr.length-1;
                        mid = (min+max)/2;
                       
                        while(arr[mid]!=key){
                                if(key>arr[mid])
                                        min = mid + 1;
                                else if(key<arr[mid])
                                        max = mid - 1;
                               
                                if(max<min)
                                        return -1;
                               
                                mid = (min+max)/2;
                        }
                        return mid;
                }
               
                //二分查找_2
                public static int binarySearch_2 (int[] arr,int key){
                        int max,min,mid;
                        min = 0;
                        max = arr.length-1;
                        while(max>=min){
                                mid = (min+max)>>1;
                                if(key>arr[mid])
                                        min = mid + 1;
                                else if(key<arr[mid])
                                        max = mid - 1;
                                else
                                        return mid;               
                                }
                        return -1;
                               
                }
       
       
       
数组的使用
什么时候使用数组?
        如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并作为角标使用。
        这时就必须要想到数组的使用。
               
就可以将这些数据存储到数组中。
根据运算的结果作为角标直接去查数组中对应的元素即可。
               
这种方式称为查表法。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

2 个回复

倒序浏览
使用查表法小练习.

输出对应星期

getWeek(5);

public static String getWeek(int num){

//定义一个对应关系表

if(num>7 || num<1)

return "没有对应的星期";

String[] str = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};

return str[num];

}



进制转换

toHex(60);



public static void toHex(int num){

if(num==0){

System.out.print('0');

return;//最好不要省略,提高程序性能,方法结束,下面代码不执行。

}

//定义一个对应关系表。

char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

/*查表会查到比较多的数据,数据多了就要存储起来,再进行操作。

定义一个数组存储,临时容器。*/



char[] arr =new char[8];

int pos = arr.length;

while(num!=0){

int temp = num & 15;

arr[--pos] = chs[temp];//temp作为角标 查表 chs 对应的是字符

num = num>>>4;//>>>无符号右移。

}

for (int i = pos; i < arr.length; i++) {

System.out.print(arr[i]);

}







进制转换



//十进制--->十六进制

public static void toHex(int num){             trans(num,15,4);  

}   

//十进制--->八进制

public static void toOctal(int num){

trans(num,7,3);

}

//十进制--->二进制

public static void toBinary(int num){

trans(num,1,1);

}



public static void trans(int num,int base,int offset){

if(num==0){

System.out.print('0');

return;//最好不要省略,提高程序性能,方法结束,下面代码不执行。

}

//定义一个对应关系表。

char[]chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

/*查表会查到比较多的数据,数据多了就要存储起来,再进行操作。

定义一个数组存储,临时容器。*/



char[] arr =new char[8];

int pos = arr.length;

while(num!=0){

int temp = num & base;

arr[--pos] = chs[temp];//temp作为角标 查表 chs 对应的是字符

num = num>>>offset;//>>>无符号右移。

}

for (int i = pos; i < arr.length; i++) {

System.out.print(arr[i]);

}

}





二维数组

格式一



int[][] arr = new int[3][2];

定义了名称为arr的二维数组。

二维数组中有三个一维数组。

每个一维数组中有两个元素。

一维数组的名称分别为arr[0],arr[1],arr[2]。

给第一个一维数组角标1角标位赋值为7的写法是:arr[0][1] = 7;



格式二

int[][] arr = new int[3][];



二维数组中有三个一维数组。

每个一维数组的默认初始化值是null。

可以对这三个一维数组分别进行初始化

arr[0] = new int[3];

arr[1] = new int[1];

arr[2] = new int[2];

格式三

Int[][] arr = {{1,5,8},{6,6,36,58},{74};







int[][] arr = new int[3][2];

System.out.println(arr[0].length);

System.out.println(arr);//直接打印二维数组

System.out.println(arr[0]);//直接打印二位数组中角标为0的,一维数组

System.out.println(arr[0][1]);//直接打印二位数组中角标为0的,一维数组中角标为1的元素   





遍历二维数组

int[][] arr = {{15,56,78,95},{85,48,235},{49,69}};

for (int i = 0; i < arr.length; i++) {

System.out.print('[');

for (int j = 0; j < arr[i].length; j++) {

if(j!=arr[i].length-1){

System.out.print(arr[i][j]+",");

}else{

System.out.println(arr[i][j]+"]");

}

}

}







数组工具类和文档注释总结



public class ArrayToolDemo {

/**

  * @param args

  */

public static void main(String[] args) {

// TODO Auto-generated method stub



//数组工具对象的建立



int[] arr = {4,3,6,8,9,5,30};

/*int maxIndex = 0;

for (int i = 1; i < arr.length; i++) {

if(arr[i]>arr[maxIndex])

maxIndex = i;

}*/

//ArrayTool tool = new ArrayTool();对象的建立无意义,浪费内存空间



int max = ArrayTool.getMax(arr);//int max = tool.getMax(arr);

System.out.println("max="+max);



int index = ArrayTool.getIndex(arr,4);//int index = tool.getIndex(arr,4);

System.out.println("index=" + index);

  

}

}





/**

建立一个 用于操作数组的工具类,其中包含着常见的对数组操作的函数,如:排序,获取最值,查找等

* @author peigen

* @version v1.0

*

*/



public class ArrayTool{//一个类文档化的前提是:必须是public权限。

//加上public后文件名和类名要一致,否则会编译失败。

private ArrayTool(){}//强制其不允许创建对象。

//该类的方法都是静态的,所以该类是不需要创建对象的 ,

//为了保证不让其他程序创建该类对象,可以将该类的构造函数私有化。



/**

获取整型数组的最大值。

@param arr 接收一个元素为int类型的数组。

@return 返回该数组中最大的元素。

*/

public static int getMax(int[] arr){//没有访问对象中的特有数据,所以静态化

int maxIndex = 0;

for (int i = 0; i < arr.length; i++) {

if(arr[i]>arr[maxIndex])

maxIndex = i;

}

return arr[maxIndex];

}



/**

  * 对数组进行选择排序

  * @param arr 接收一个元素为int类型的数组。

  */

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]) {

swap(arr, i, j);

}

}

}

}



/**

   用于给数组进行元素的位置置换。

   @param arr 接收一个元素为int类型的数组。

   @param i

   @param j

  */

private static void swap(int[] arr, int i, int j) {

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

/**

  * 获取指定元素在指定数组中的索引。

  * @param arr接收一个元素为int类型的数组。

  * @param key 要找的元素

  * @return 返回该元素第一次出现的位置,如果不存在返回-1

  */

public static int getIndex(int[] arr,int key){

for (int i = 0; i < arr.length; i++) {

if(arr[i] == key)

return i;

}

return -1;

}



/**

  * 将int数组装潢成字符串。格式是[e1,e2……]

  * @param arr 接收一个元素为int类型的数组

  * @return 返回该数组的字符串表现形式。

  */

public static String arrayToString(int[] arr){

String str = "[";

for (int i = 0; i < arr.length; i++) {

if(i !=arr.length-1)

str = str + arr[i]+ ", "

else

str = str + arr[i]+ "]"

}

return str;

}



}
回复 使用道具 举报
本帖最后由 李培根 于 2012-12-8 15:51 编辑

进制转换
        toHex(60);
       
        public static void toHex(int num){
                if(num==0){
                        System.out.print('0');
                        return;//最好不要省略,提高程序性能,方法结束,下面代码不执行。
                }
                //定义一个对应关系表。
                char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                /*查表会查到比较多的数据,数据多了就要存储起来,再进行操作。
                定义一个数组存储,临时容器。*/
               
                char[] arr =new char[8];
                int pos = arr.length;
                while(num!=0){
                        int temp = num & 15;
                        arr[--pos] = chs[temp];//temp作为角标 查表 chs 对应的是字符
                        num = num>>>4;//>>>无符号右移。
                }
                for (int i = pos; i < arr.length; i++) {
                        System.out.print(arr);
                }
进制转换
//十进制--->十六进制
        public static void toHex(int num){                                   trans(num,15,4);                        
        }                                                                          
        //十进制--->八进制
        public static void toOctal(int num){
                trans(num,7,3);
        }       
        //十进制--->二进制
        public static void toBinary(int num){
                trans(num,1,1);
        }
       
        public static void trans(int num,int base,int offset){
                if(num==0){
                        System.out.print('0');
                        return;//最好不要省略,提高程序性能,方法结束,下面代码不执行。
                }
                //定义一个对应关系表。
                char[]chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
                /*查表会查到比较多的数据,数据多了就要存储起来,再进行操作。
                定义一个数组存储,临时容器。*/
               
                char[] arr =new char[8];
                int pos = arr.length;
                while(num!=0){
                        int temp = num & base;
                        arr[--pos] = chs[temp];//temp作为角标 查表 chs 对应的是字符
                        num = num>>>offset;//>>>无符号右移。
                }
                for (int i = pos; i < arr.length; i++) {
                        System.out.print(arr);
                }
        }
二维数组
                格式一  int[][] arr = new int[3][2];                       
                        定义了名称为arr的二维数组。
                        二维数组中有三个一维数组。
                        每个一维数组中有两个元素。
                        一维数组的名称分别为arr[0],arr[1],arr[2]。
                        给第一个一维数组角标1角标位赋值为7的写法是:arr[0][1] = 7;
格式二  int[][] arr = new int[3][];
                                       
                        二维数组中有三个一维数组。
                        每个一维数组的默认初始化值是null。
                        可以对这三个一维数组分别进行初始化
                        arr[0] = new int[3];
                        arr[1] = new int[1];
                        arr[2] = new int[2];
格式三 int[][] arr = {{1,5,8},{6,6,36,58},{74};
               
                int[][] arr = new int[3][2];
                System.out.println(arr[0].length);
                System.out.println(arr);//直接打印二维数组
                System.out.println(arr[0]);//直接打印二位数组中角标为0的,一维数组
                System.out.println(arr[0][1]);//直接打印二位数组中角标为0的,一维数组中角标为1的元素   
遍历二维数组
                int[][] arr = {{15,56,78,95},{85,48,235},{49,69}};
                for (int i = 0; i < arr.length; i++) {
                        System.out.print('[');
                        for (int j = 0; j < arr.length; j++) {
                                if(j!=arr.length-1){
                                        System.out.print(arr[j]+",");
                                }else{
                                        System.out.println(arr[j]+"]");
                                }
                        }                       
                }
数组工具类和文档注释总结
public class ArrayToolDemo {
        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
               
                //数组工具对象的建立
               
                int[] arr = {4,3,6,8,9,5,30};
                /*int maxIndex = 0;
                for (int i = 1; i < arr.length; i++) {
                        if(arr>arr[maxIndex])
                                maxIndex = i;
                }*/
                //ArrayTool tool = new ArrayTool();对象的建立无意义,浪费内存空间
               
                int max = ArrayTool.getMax(arr);//int max = tool.getMax(arr);
                System.out.println("max="+max);
               
                int index = ArrayTool.getIndex(arr,4);//int index = tool.getIndex(arr,4);
                System.out.println("index=" + index);
                 
        }               
}
/**
建立一个 用于操作数组的工具类,其中包含着常见的对数组操作的函数,如:排序,获取最值,查找等
* @author peigen
* @version v1.0
*
*/
public class ArrayTool{//一个类文档化的前提是:必须是public权限。
        //加上public后文件名和类名要一致,否则会编译失败。
        private ArrayTool(){}//强制其不允许创建对象。
        //该类的方法都是静态的,所以该类是不需要创建对象的        ,
        //为了保证不让其他程序创建该类对象,可以将该类的构造函数私有化。
       
        /**       
        获取整型数组的最大值。
        @param arr 接收一个元素为int类型的数组。
        @return 返回该数组中最大的元素。
        */
        public static int getMax(int[] arr){//没有访问对象中的特有数据,所以静态化
                int maxIndex = 0;
                for (int i = 0; i < arr.length; i++) {
                        if(arr>arr[maxIndex])
                                maxIndex = i;
                }
                return arr[maxIndex];
        }
       
        /**
         * 对数组进行选择排序
         * @param arr 接收一个元素为int类型的数组。
         */
        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>arr[j]) {
                                        swap(arr, i, j);
                                }                                       
                        }
                }
        }
        /**
          用于给数组进行元素的位置置换。
          @param arr 接收一个元素为int类型的数组。
          @param i
          @param j
         */
        private static void swap(int[] arr, int i, int j) {               
                int temp = arr;
                arr = arr[j];
                arr[j] = temp;
        }
        /**
         * 获取指定元素在指定数组中的索引。
         * @param arr接收一个元素为int类型的数组。
         * @param key 要找的元素
         * @return 返回该元素第一次出现的位置,如果不存在返回-1
         */
        public static int getIndex(int[] arr,int key){               
                for (int i = 0; i < arr.length; i++) {
                        if(arr == key)
                                return i;
                }
                return -1;
        }
        /**
         * 将int数组装潢成字符串。格式是[e1,e2……]
         * @param arr 接收一个元素为int类型的数组
         * @return 返回该数组的字符串表现形式。
         */
        public static String arrayToString(int[] arr){
                String str = "[";
                for (int i = 0; i < arr.length; i++) {
                        if(i !=arr.length-1)
                                str = str + arr+ ", "
                        else
                                str = str + arr+ "]"
                }
                return str;
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马