黑马程序员技术交流社区

标题: java基础语法笔记(函数、重载、数组)(下) [打印本页]

作者: 王健辉    时间: 2014-8-4 17:11
标题: java基础语法笔记(函数、重载、数组)(下)
**数组操作常见问题
数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
System.out.println(arr[3]);

访问到了数组中的不存在的脚标时发生。
空指针异常(NullPointerException)
int[] arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。

数组的操作:
1.获取数组中的数据,通常会用到遍历(for循环),
arr.length代表数组的长度.示例;
class ArrayDemo{
   public static void main(String[] args){
     int[] arr=new int[5];
     for(int x=0;x<arr.length;x++)
     {
       System.out.println("arr["+x"]+"=+arr[x]+";");

     }

   }
}//int型数组默认整数元素都为0.

2.定义功能,用于打印数组中的元素。元素间用逗号隔开。加[]
class ArrayDemo{
        public static void main(String[] args){
        int[] arr = {3,6,5,1,8,9,67};
        printArray(arr);
        }
        public static void printArray(int[] arr)
        {
           System.out.print("[");
           for(int x=0; x<arr.length; x++)
           {
                if(x!=arr.length-1)
                     System.out.print(arr[x]+", ");
                else
                     System.out.println(arr[x]+"]");

            }               
        }

}
3.获取最值
//示例:获取最大值,获取最小值只要把关键词和符号改下就行
获取数组中的最大值。
思路:
1,获取最值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。通过一个变量进行临储。
2,让数组中的每一个元素都和这个变量中的值进行比较。如果大于了变量中的值,就用该该变量记录较大值。
3,当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了。
步骤:
1,定义变量。初始化为数组中任意一个元素即可。
2,通过循环语句对数组进行遍历。
3,在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量;
*需要:定义一个功能来完成。以便提高复用性。
1,明确结果,数组中的最大元素 int。、
2,未知内容:一个数组。int[]

class ArrayDemo{
     public static void main(String[] args){
         int[] arr={5,1,6,4,2,8,9};
         int max=getMax(arr);//这个max是类的成员变量
         System.out.println("max="+max);
     }
        public static int getMax(int[] arr)
        {
                int max = arr[0];//可换成int max = 0;

                for(int x=1; x<arr.length; x++)
               {
                  if(arr[x]>max)//if(arr[x]>ar[max])
                    max = arr[x];//max=x
                }
                return max;//return arr[max]
        }
}
4.数组选择排序(一般都是升值排序,降序只需要改下大小符号):内循环结束一次,最值出现头角标位置上
class ArrayDemo{
        public static void main(String[] args){
        int[] arr = {3,6,5,1,8,9,67};
        //排序前
        printArray(arr);
        //排序
        selectSort(arr);
        //排序后
        printArray(arr);
        }
        public static void selectSort(int[] arr)
        {
            for (int x=0; x<arr.length-1;x++)
            {
                for(int y=x+1; y<arr.length;y++)
                {
                        if(arr[x]>arr[y])
                        {

                                int temp = arr[x];
                                arr[x] = arr[y];
                                arr[y]= temp;
                        }
                }
            }
        }
        public static void printArray(int[] arr)
        {
           System.out.print("[");
           for(int x=0; x<arr.length; x++)
           {
                if(x!=arr.length-1)
                     System.out.print(arr[x]+", ");
                else
                     System.out.println(arr[x]+"]");

            }               
        }
}
5.数组冒泡排序:相邻的两个元素进行比较,第一圈,最值出现在最后。
class ArrayDemo{
   public static void main(String[] args){
        int[] arr = {3,6,5,1,8,9,18};
        //排序前
        printArray(arr);
        //排序
        bubbleSort(arr);
        //排序后
        printArray(arr);
   }   
   public static void  bubbleSort(int[] arr){
               
    for(int x=0; x<arr.length-1;x++)//控制比较的圈数
    {
      for(int y=0;y<arr.length-x-1;y++)//控制每圈比较

     //的次数-1是避免角标越界,-x是让每一次比较的元素减少
      {
        if(arr[y]>arr[y+1])
        {
          int temp=arr[y+1];
          arr[y+1]=arr[y];
          arr[y]=temp;               
        }
      }
    }
  }
   public static void printArray(int[] arr)
   {
           System.out.print("[");
           for(int x=0; x<arr.length; x++)
           {
                if(x!=arr.length-1)
                     System.out.print(arr[x]+", ");
                else
                     System.out.println(arr[x]+"]");

            }               
   }
}
6.数组的一般查找:获取key第一次出现在数组中的位置。如果返回是-1,那么就代表key在数组中不存在。
class ArrayDemo{
   public static void main(String[] args){
        int[] arr = {3,6,5,1,8,9,18};
        int index=getIndex(arr,5);
        System.out.print("index="+index);
   }
   public static int getIndex(int[] arr,int key)
   {
           for(int x=0; x<arr.length; x++)
           {
                if(arr[x]==key)
                        return x;
           }
           return -1;
                   
   }
}
7.折半查找(二分查找)。提高效率,但是必须要保证该数组是有序的数组。  
第一种方法:
class ArrayDemo{
     public static void main(String[] args){
        int[] arr={1,2,4,6,8,23,46};
        int index=halfSearch(arr,23);
        System.out.println("index="+index);
     }   
     public static int halfSearch(int[] arr,int key)
    {
                int min,max,mid;
                min = 0;
                max = arr.length-1;
                mid = (max+min)/2;

                while(arr[mid]!=key)
                {
                        if(key>arr[mid])
                                min = mid + 1;
                        else if(key<arr[mid])
                                max = mid - 1;

                        if(min>max)
                                return -1;
                        mid = (max+min)/2;
                }
                return mid;
        }
}
第二种方法:
class ArrayDemo{
    public static void main(String[] args){
        int[] arr={1,2,4,6,8,23,46};
        int index=halfSearch_2(arr,6);
        System.out.println("index="+index);
    }   
   public static int halfSearch_2(int[] arr,int key)
   {
                int min = 0,max = arr.length-1,mid;

                while(min<=max)
                {
                        mid = (max+min)>>1;

                        if(key>arr[mid])
                                min = mid + 1;
                        else if(key<arr[mid])
                                max = mid - 1;
                        else
                                return mid;
                }
                return -1;
    }
}
8.进制转换。
**十进制——>十六进制
class         ArrayTest5{
        public static void main(String[] args){
        toHex(60);
        }
        public static void toHex(int num){
           StringBuffer sb = new StringBuffer();

           //定义循环,次数是按照32位中4个二进制为为一组       

        ,一共有8组。
           for(int x=0; x<8; x++){
                int temp = num & 15;//让给定的整数和       

                        15进行&运算
                if(temp>9)
        //System.out.println((char)(temp-10+'A'));
                   sb.append((char)(temp-10+'A'));
                else
                  //System.out.println(temp);
                   sb.append(temp);
                num = num >>> 4;//将源数据进行右移4位  

                                //,赋值给num。
           }
           System.out.println(sb.reverse());
        }
}

**十进制——>二进制

class         ArrayTest5{
        public static void main(String[] args){
        toBin(6);
        }

        public static void toBin(int num){
           StringBuffer sb = new StringBuffer();//存

数据的容器,                                 //StringBuffer是

为了下面反转功能用的.
           while(num>0){
                //System.out.println(num%2);
                sb.append(num%2);//append是添加,是

StringBuffer的功能。
                num=num/2;
           }
          System.out.println(sb.reverse

());//reverse(),反转。
       }
}
四.二维数组:简单说就是,数组中的数组。

格式1:int[][] arr = new int[3][2];
定义了名称为arr的二维数组,二维数组中有3个一维数组,每一个一维数组中有2个元素,
一维数组的名称分别为arr[0], arr[1], arr[2]
给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组,每个一维数组都是默认初始化值null可以对这个三个一维数组分别进行初始化,
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
int[][] arr=new int [3][4];定义了一个名称为arr的二维数组,这个二维数组中有3个一位数组,每一个一位数组中有四个元
素,3代表的是二维数组的长度,4代表的是二维数组中每一个位数组的长度。
格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
定义一个名称为arr的二维数组
二维数组中的有三个一维数组
每一个一维数组中具体元素也都已初始化
第一个一维数组 arr[0] = {3,8,2};
第二个一维数组 arr[1] = {2,7};
第三个一维数组 arr[2] = {9,0,1,6};
第三个一维数组的长度表示方式:arr[2].length;
注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。

*二维数组的遍历(获取arr数组中所有元素的和。使用for的嵌套循环即可。)
for(int x=0;x<arr.length;x++){

     for(int y=0;y<arr[x].length;y++)
     {
        sum=sum+arr[x][y];
      }

}

练习:
int[] x,y[]; x是一维数组,y是二维数组。相当于 int x[]   

int y[][];

a)x[0]=y  //错误
b)y[0]=x  //正确 两边都是一维数组
c)y[0][0]=x; //错误
d)x[0][0]=y;//错误




作者: 申航航    时间: 2014-8-4 17:32
不错啊,,,,,,,
作者: kakasa    时间: 2014-8-4 19:53
嗯 看看自己总结的有啥遗漏
作者: 月夜小楠    时间: 2014-8-4 20:01
赞一个!!!
作者: 侯岩卿    时间: 2014-8-4 21:22
总结的不错,看完一遍印象加深了不少啊
作者: guanxiangliang    时间: 2014-8-4 21:26
汗!这是什么的节奏,这个貌似可以当做博客日志;P
作者: 王健辉    时间: 2014-8-5 08:24
guanxiangliang 发表于 2014-8-4 21:26
汗!这是什么的节奏,这个貌似可以当做博客日志

其实我在求技术分,以前把这个忽略了
作者: 王健辉    时间: 2014-8-5 08:42
侯岩卿 发表于 2014-8-4 21:22
总结的不错,看完一遍印象加深了不少啊

就那样吧,哈哈
作者: 王健辉    时间: 2014-8-5 08:43
月夜小楠 发表于 2014-8-4 20:01
赞一个!!!

谢谢赞……
作者: 王健辉    时间: 2014-8-5 08:44
侯岩卿 发表于 2014-8-4 21:22
总结的不错,看完一遍印象加深了不少啊

还是老毕视频的那些重点
作者: 王健辉    时间: 2014-8-5 08:45
kakasa 发表于 2014-8-4 19:53
嗯 看看自己总结的有啥遗漏

嗯,这个可以有
作者: 王健辉    时间: 2014-8-5 08:46
申航航 发表于 2014-8-4 17:32
不错啊,,,,,,,

还行吧……
作者: 张涛的狂怒    时间: 2014-8-5 08:59
挺好的,支持下
作者: 250669200@qq.co    时间: 2014-8-5 09:29
支持一下吧
作者: 250669200@qq.co    时间: 2014-8-5 09:35
let's go go


作者: MGC    时间: 2014-8-5 10:46
哈哈,这个是blog的节奏啊
作者: 王健辉    时间: 2014-8-6 00:52
张涛的狂怒 发表于 2014-8-5 08:59
挺好的,支持下

好的……
作者: 王健辉    时间: 2014-8-6 00:57
250669200@qq.co 发表于 2014-8-5 09:29
支持一下吧

谢谢……
作者: hzl_0911    时间: 2014-8-6 01:39
总结得不错,赞一个
作者: 王健辉    时间: 2014-8-6 01:43
MGC 发表于 2014-8-5 10:46
哈哈,这个是blog的节奏啊

被您发现了
作者: 王健辉    时间: 2014-8-6 01:45
hzl_0911 发表于 2014-8-6 01:39
总结得不错,赞一个

也有参考别人的,然后写下自己的
作者: sunshine9091    时间: 2014-8-6 08:15
欢迎还有下回!
作者: 王健辉    时间: 2014-8-6 10:41
sunshine9091 发表于 2014-8-6 08:15
欢迎还有下回!

哈哈……
作者: 641283812    时间: 2014-8-6 11:55
支持,总结得好全面啊。
作者: 王健辉    时间: 2014-8-13 23:28
641283812 发表于 2014-8-6 11:55
支持,总结得好全面啊。

看看吧……
作者: 郭旭辉    时间: 2014-8-13 23:43
受教了、、、
作者: 王健辉    时间: 2014-8-13 23:47
拿走拿走
作者: 王健辉    时间: 2014-8-13 23:49
郭旭辉 发表于 2014-8-13 23:43
受教了、、、

拿走拿走,
作者: Huberry    时间: 2014-8-14 01:54
看完跟复习一遍一样
作者: 好男人进化论    时间: 2014-8-14 09:49
谢谢分享
作者: 王健辉    时间: 2014-8-15 16:17
Huberry 发表于 2014-8-14 01:54
看完跟复习一遍一样

学习很用功啊你
作者: 王健辉    时间: 2014-8-15 16:20
好男人进化论 发表于 2014-8-14 09:49
谢谢分享

不客气 不客气
作者: 丨懒蟲灬Nigh    时间: 2014-8-15 18:50
你这笔记有点狠  我都是截图直接放的 你手写貌似应该花了不少时间诶 干嘛不直接截图~~~
作者: liqiaohui    时间: 2014-8-15 19:16
支持下 再复习下
作者: Huberry    时间: 2014-8-15 20:15
王健辉 发表于 2014-8-15 16:17
学习很用功啊你

{:3_50:}何以见得
作者: 王健辉    时间: 2014-8-19 09:27
Huberry 发表于 2014-8-15 20:15
何以见得

看完跟复习一遍一样,你看完了,再复习
作者: 王健辉    时间: 2014-8-19 09:33
liqiaohui 发表于 2014-8-15 19:16
支持下 再复习下

好的 好的
作者: 王健辉    时间: 2014-8-19 09:34
丨懒蟲灬Nigh 发表于 2014-8-15 18:50
你这笔记有点狠  我都是截图直接放的 你手写貌似应该花了不少时间诶 干嘛不直接截图~~~ ...

有手写的,也有其他的搜索资料
作者: 大★宝    时间: 2014-8-19 11:15
看了一遍,有了新收获,顶楼主




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2