美文网首页
三、Java语言基础3(数组的基本操作和练习)

三、Java语言基础3(数组的基本操作和练习)

作者: SkyFireDragon | 来源:发表于2019-04-01 21:04 被阅读0次

这些是笔者学习Java基础时的笔记,供后来者参考(学习是持之以恒的的事情,一定要坚持哟,切记!切记!!!)

一、数组:

1.数组的定义
    <1>数组的定义和静态初始化
        (1)int[] arr = new int[2];
        (2)int[] arr = new int[]{3,1,6,5,4};
            int[] arr = {3,1,6}

    <2>常见问题:
    ArrayIndexoutofBoundsException:访问数组中不存在的角标
    NullPointerException:空指针异常

2.数组常见操作之遍历
    <1>循环遍历数组
       for(int i=0;x<arr.length;x++)
       {
             System.out.println("arr["+x+"]="+arr[x]+ ";");
       }

      打印数组的元素的函数:
      public static void printArray(int[] arr)
      {
          for(int x=0;x<arr.length;x++){
                if(x!=arr.length-1)
                   System.out.print(arr[x] ",");
                else
                   System.out.println(arr[x]);
          }
      }

 *注:直接打印数组的引用[I@debced
      [:表示数组
      I:表示int
      @:表示指向
      debced:哈希函数生成的值,表示数组在内存中的地址

 3.数组常见操作之获取最值
 需求:获取一个数组中的最小值和最大值

 public static int max,min;
 public static void main(String[] args)
 {
      int[] array = new int[]{8,3,7,23,76,21,3,4,56};
      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]);
      }
      getM(array);
      System.out.println("max = " max " min = " min);
 }

 获取最值的函数
 public static void getM(int[] array)
 {
      max=min=array[0];
      for(int i=1;i<array.length;i++)
      {
           if(max<array[i])
              max=array[i];
           if(min>array[i])
              min=array[i];
      }
 }

 4.数组排序:选择排序

  需求:数组之选择排序。
  思路:
     1、选择排序方法,数组中的第一个值与其他值比较,将最小值与第一个值进行交换。
     2、然后第二个数与后面的值比较 .....直到结束。

  选择排序函数:

 public static void selectSort(int[] array)
 {
      for(int i=0;i<array.length-1;i++){
       for(int j=i+1;j<array.length;j++) {
           if(array[i]>array[j])
            change(array,i,j);
       }
    }
 }

 5.数组排序:冒泡排序

      思路:冒泡排序的基本方法
          1、相邻两个元素n,n 1进行比较,如果前一个元素大于后一个元素,交换两个数。
                否则,继续比较之后的数n 1,n2;
          2、每次比较之后,最值出现在数组之后,下次循环需要取消对数组已出现的最值的比较。

      public static void bubbleSort(int[] arr)
      {
           for(int i=arr.length-1;i>0;i--)
           {
                for(int j=0;j<i;j++)
                {
                     if(arr[j]>arr[j+1])
                     {
                          int temp=arr[j];
                          arr[j]=arr[j+1];
                          arr[j+1]=temp;
                     }
                }
           }
      }

6、插入排序:
    思路:一个无序的数组,我们认为它的第0项是有序的,然后我们从它之后的数据中选出一项,插入到前面的有序数据中,直到数组都有序为止;

    实现:
    public static void insertSort1(int[] array){
        for(int i=0;i<array.length-1;i++){
             int pre = i;
            int temp = array[i+1];
            while(pre >=0 && temp<array[pre]){
            array[pre+1] = array[pre];
            pre--;
        }
        array[pre+1] = temp;
      }
    }

 7、数组排序:位置置换,功能抽取
 public static void change(int[] arr,int a,int b)
 {
      int temp = arr[a];
      arr[a] = arr[b];
      arr[b] = temp;
 }

 8、数组查找:折半查找
      需求:对有序的数组进行折半查找
      思路:折半查找数组,如果数值存在,返回角标,不存在,返回-1;

      public  static int halfserach(int[] arr, int x)
      {
           int half,high,low;
           low = 0;
           high = arr.length-1;
           half = (high+low)>>1;
           while(arr[half] != x)
           {
                if(arr[half]<x)
                     low = half + 1;
                else if(arr[half]>x)
                     high = half - 1;
                if(high>=low)
                     return -1;
                half = (high+low)>>1;
           }
           return half;
      }

二、 进制转换

 1.十进制转换二进制

 public static int bin(int x)
 {
      StringBuffer strb = new StringBuffer();
      while(num>0)
      {
           strb.append(num%2);
      }
      System.out.println(strb.reverse());
}

 2.十进制转换为十六进制

 方法一:
      需求:十进制转换为二进制,并打印输出 

      public static void toBin(int num)
      {
           StringBuffer strb = new StringBuffer();
           while(num>0)
           {
                strb.append(num%2);
                num = num>>1;
           }
            System.out.println(strb.reverse());
      }

3.数组查表法(十进制转换为十六进制)

方法二:
    需求:十进制转换为十六进制,查表法

    public static void toBin02(int num)
    {
        StringBuffer strb = new StringBuffer();
        for(int i=0;i<8;i++)
        {
                int temp = num&15;
                if(temp>9)
                    strb.append((char)(temp-10+'A'));
                else
                    strb.append(temp);
                num=num>>>4;
         }
         System.out.println(strb.reverse());
    }


4.进制转换函数的优化

   需求:实现十进制向二进制、八进制、十六进制转换
   需求:十进制转换为二进制

    public static void toBin(int num)
    {
            trans(num,1,1);
    }

   需求:十进制转换为八进制
    public static void toBa(int num)
    {
            trans(num,7,3);
    }

   需求:十进制转换为十六进制
    public static void toHax(int num)
    {
            trans(num,15,4);
    }

   需求:进制转换函数
    public static void trans(int num,int base,int offset)
    {
        if(num==0)
        {
           System.out.println(0);
           return;
        }
        char[] chs ={'0','1','2','3',
                 '4','5','6','7',
                 '8','9','A','B',
                 'C','D','E','F'};
        char[] arr = new char[32];
        int point = arr.length;
        while(num!=0)
        {
           int temp = num & base;
           arr[--point] = chs[temp];
           num = num >>> offset;
        }

        for(int i=point;i<arr.length;i++)
        {
           System.out.print(arr[i]);
        }
        System.out.println();
  }

6.数组之二维数组
     <1>原理:二维数组的元素是一维数组
     <2>定义方式:
        int[][] i = new int[2][3];
        int[][] arr1 = {{1,2,3},{4,5,6},{7,8,9}};
        不规则数组:
        int[][] arr2 = new int[3][];
        arr2[0] = new int[2];
        arr2[1] = new int[3];
        arr2[2] = new int[5];

相关文章

网友评论

      本文标题:三、Java语言基础3(数组的基本操作和练习)

      本文链接:https://www.haomeiwen.com/subject/aribbqtx.html