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

这些是笔者学习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];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容