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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 温暖的小白 金牌黑马   /  2015-5-12 22:18  /  7196 人查看  /  50 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 温暖的小白 于 2015-5-12 22:45 编辑

    本帖为”数组“笔记分享提交专用帖,只能回复有关”数组“的Java笔记,不得回复与活动主题无关的帖子。

    回复格式如下:

        笔记内容:**********
        笔记来源:毕向东Java基础视频第*天
        正文:
            **********

   
添加代码时请选择编辑器上面的”添加代码文字

   凡是不按要求回复的帖子一律不得加分。

   奖惩规则见活动帖:点击查看{活动帖}

    勤奋学习,欢乐得分,正在进行中......

50 个回复

倒序浏览
笔记内容:数组
        笔记来源:毕向东Java基础视频第4天
        正文:
1、数组。
数组是用于存储数据的一种方式。数组中数据的类型可以是任意的,但是一次放进去的,只能是同种类型的元素。
数组的好处:能自动给存进去的数据编号,方便操作这些数据。编号从零开始。
数组的定义格式1:元素类型[] 数组名=new 元素类型[元素个数或数组长度]。其中new是一个新的关键字,用来在内存中产生一个容器实体。数组是一种单独的数据类型,属于引用数据类型。
格式2:元素类型[] 数组名=new 元素类型[]{元素,元素……}。
Int[] arr=new int[]{2,6,7,3,2,5};或者
Int[] arr={2,6,7,3,2,5};
Java在内存中的存储情况:java在启动时,一共在内存中开辟了五块空间来进行自己数据的存储。包括:栈内存,堆内存,方法区,本地方法区,寄存器。后三种等以后再说。每片内存区域中处理数据的方式不一样,因此才划分那么细。
栈内存特点:数据使用完毕,会自动释放。记住,凡是局部变量,都在栈内存里。
堆内存:堆里面存放的都是实体,实体包括数组和对象。凡是new创造出来的实体,都是在堆内存中。特点:1、堆内存中的每一个实体,都有一个内存地址值。2、堆内存中的实体是用来封装数据的,而对内存中的实体中的数据都有默认初始化值。这个值依据元素类型而定,int型默认为0,double默认为0.0,float为0.0f,boolean型为false。3、垃圾回收机制。
Null常量只有引用数据类型才能使用。如果将一个数组x[]赋值成null,则不知道了堆内存中数据的初始地址,则和对应的实体就没关系了。当一个实体在堆内存中没有任何引用所使用时,java虚拟机就视他为垃圾,并会不定时的启动一个垃圾回收机制,将数组实体在堆内存中清除。
数组的操作:
1、获取数组中的元素,这是数组中最常用到的操作,通常会用到遍历。
2、数组中有个属性,可以直接获取到数组的数组元素的个数。Length
使用方式:数组名称.length
通常情况下,用到数组的时候,都要用到for循环。

(一)排序算法:(排序算法中最快的,也就是效率最高的是希尔排序,是三层循环加上位运算实现的,感兴趣的话,可以在网上找找其他的排序算法,比如插入、快速等。)
一、选择排序。
1、使用零角标位上的数和其后面的元素进行比较,如果比它大,则两者交换位置,否则,不用做任何操作。这样就得到了最大的数。
2、使用1角标上的数和其后面的元素进行挨个比较,同上面的方法,找出第二大的数。
3、这样就得到了从大到小的顺序数组。
选择排序中,内循环结束一次,最值出现在头角标上。
  1. /*
  2. 需求:对给定数组进行排序,{5,1,6,4,2,8,9},按照从大到小的顺序。并定义成一个功能,以提高代码的复用性。使用选择排序算法。
  3. 思路:1、使用零角标位上的数和其后面的元素进行比较,如果比它大,则两者交换位置,否则,不用做任何操作。这样就得到了最大的数。
  4.         2、使用1角标上的数和其后面的元素进行挨个比较,同上面的方法,找出第二大的数。
  5.         3、这样就得到了从大到小的顺序数组。
  6. 步骤:1、先定义一个变量,代表数组的角标。
  7.         2、定义一个for循环,将arr[0]和其后的元素进行比较,将最大的数交换到arr[0]
  8.         3、然后用arr[1]和其厚度元素比较,最后得出结果。

  9. */

  10. class  ArrayTest1
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 int[] arr={5,1,6,4,2,8,9};
  15.                 printarray(arr);
  16.                 select(arr);
  17.                 printarray(arr);
  18.         }
  19.         public static void select(int[] arr)//选择排序
  20.         {
  21.                 for(int x=0;x<arr.length;x++)
  22.                 {
  23.                         for(int y=x;y<arr.length;y++)
  24.                         {
  25.                                 if(arr[x]<arr[y])
  26.                                 {
  27.                                         int temp=arr[y];
  28.                                         arr[y]=arr[x];
  29.                                         arr[x]=temp;
  30.                                 }
  31.                         }
  32.                 }
  33.                
  34.         }
  35.         public static void printarray(int[] arr)//打印数组中的每个元素
  36.         {
  37.                 System.out.print("{");
  38.                 for(int x=0;x<arr.length;x++)
  39.                 {
  40.                         if(x<arr.length-1)
  41.                         {
  42.                                 System.out.print(arr[x]+", ");
  43.                         }
  44.                         else
  45.                         {
  46.                                 System.out.print(arr[x]);
  47.                         }
  48.                 }
  49.                 System.out.println('}');
  50.         }
  51. }
复制代码


二、冒泡排序
算法:相邻的两个元素进行比较,如果符合条件就换位。第一圈排完,最值出现在了最后位。
  1. /*
  2. 需求:使用选择冒泡算法。对给定数组进行排序,{5,1,6,4,2,8,9},按照从小到大的顺序。并定义成一个功能,以提高代码的复用性。
  3. 思路:1、相邻的两个数相比较,如果后者小,则两者换位置,那么到最后比完,最大的数就到了最后面的位置。
  4. 2、然后从头开始比,到倒数第二个元素时就不用比了。
  5. 3、这样就得到了一个从小到大顺序排列的数组。
  6. */

  7. class ArrayTest3
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 int[] arr={5,1,6,4,2,8,9,19,50,30,60};
  12.                 printarray(arr);
  13.                 bubblesort(arr);
  14.                 printarray(arr);
  15.         }
  16.         public static void bubblesort(int[] arr)
  17.         {
  18.                 for(int x=0;x<arr.length;x++)
  19.                 {
  20.                         for(int y=1;y<arr.length-x;y++)
  21.                         {
  22.                                 if(arr[y]<arr[y-1])
  23.                                 {
  24.                                         int temp=arr[y-1];
  25.                                         arr[y-1]=arr[y];
  26.                                         arr[y]=temp;
  27.                                 }
  28.                         }

  29.                 }
  30.         }
  31.         public static void printarray(int[] arr)//打印数组中的每个元素
  32.         {
  33.                 System.out.print("{");
  34.                 for(int x=0;x<arr.length;x++)
  35.                 {
  36.                         if(x<arr.length-1)
  37.                         {
  38.                                 System.out.print(arr[x]+", ");
  39.                         }
  40.                         else
  41.                         {
  42.                                 System.out.print(arr[x]);
  43.                         }
  44.                 }
  45.                 System.out.println('}');
  46.         }
  47. }
复制代码



发现:无论什么排序,都需要对满足条件的元素进行位置置换,所以可以把相同的代码提取出来,单独封装成一个函数。
(二)数组的查找操作:
1、把数组中所有的元素遍历一遍,如果与所查找数相等,则返回其角标,这种方法代码简单,但是效率不高。
2、折半查找:提高效率,但是必须要保证该数组是有序的数组。要记得,将查找的关键字和数组中间的元素比较后,要对mid值重新赋值,变为改变后的Mid=(min+max)/2。
Min=0;
Max=arr.length-1;
Mid=(min+max)/2;
while(key!=arr[mid])
                {
                        if(key>arr[mid])
                                min=mid+1;
                        else if(key<arr[mid])
                                max=mid-1;
                        mid=(min+max)/2;
                        if(min>max)
                                return -1;
                }
                return mid;


这是为什么将一个数插入一个有序数组时,如果该元素存在于数组中,则返回mid,如果不存在,则返回min的原因。
一、二维数组
1、定义格式1:int[] [] arr=new int[2][3];
这样就定义了一个二维数组,数组名为arr,包含两个一维数组,每个一维数组的长度为3.
一维数组的名称分别为arr[0],arr[1],arr[2]。给第二个二维数组的第三个元素,即角标为2的元素赋值89的写法是:arr[1][2]=89.第一个数组的长度表示方法:arr[0].length.
定义格式2:int[][] arr=new int[3][];
定义了一个长度为3的二维数组,其中每一个一维数组的默认初始化值为null,可以对他们分别初始化: arr[0]=new int [3];



二维数组的小练习:
一维数组中,int[] x;int x[];这两种定义方法都是可以的。
二维数组中,int[][] y;int[] y[];int y[][];这三种定义方法也都是可以的。
那么int[] x,y[];这样定义,则表示x是一个一维数组,y是二维数组。
相当于int[] x;   int[] y[];(但是一边不这样定义,只是考试或面试题中会这样定义。)

点评

笔记记得很详细,但是排序的代码可以精简一些,将两个排序放在同一文件中更方便比较,还有就是注意排版格式。  发表于 2015-5-13 11:46
回复 使用道具 举报 2 0
本帖最后由 c523106 于 2015-5-13 00:57 编辑

笔记内容:数组
笔记来源:毕向东Java基础视频第4天
正文:
一、数组的定义:存储同一种数据类型的多个元素的容器。
二、定义格式:
1:数据类型[] 数组名;
2:数据类型 数组名[];(了解即可)
三、数组的初始化
1、数据类型[] 数组名=new 数据类型[数组长度];
            举例:int[] arr = new int[3];
2、数据类型[] 数组名=new 数据类型[]{存储元素};
            举例:int[] arr = new int[]{1,2,3};
            简写:int[] arr = {1,2,3};
四、数组的常见操作
1.遍历,获取最值,逆序,查找
  1. package cn;

  2. import java.util.Scanner;

  3. /**
  4. * 数组遍历(依次输出数组中的每一个元素)
  5. * 数组获取最值(获取数组中的最大值最小值)
  6. * 数组元素逆序 (就是把元素对调)
  7. * 数组查表法(根据键盘录入索引,查找对应星期)
  8. * 数组元素查找(查找指定元素第一次在数组中出现的索引)
  9. */
  10. public class ArrayTest {
  11.     public static void main(String[] args) {
  12.         int[] arr = { 1, 2, 3, 4, 3, 6, 3 };
  13.         // method1(arr);
  14.         // getMax(arr);
  15.         // reverseArr(arr);
  16. //        find();
  17.         findIndex(3 ,arr);
  18.     }

  19.     public static void findIndex(int num,int[] arr) {
  20.         // TODO Auto-generated method stub
  21.         int count=0;
  22.         for(int x:arr){
  23.             if(x==num){
  24.                 System.out.println(count);
  25.                 break;
  26.             }
  27.             count++;
  28.         }
  29.     }

  30.     public static void find() {
  31.         // TODO Auto-generated method stub
  32.         Scanner sc = new Scanner(System.in);
  33.         System.out.println("请输入索引:");
  34.         int index = sc.nextInt();
  35.         int[] arr = { 1, 2, 3, 4, 5, 6, 7 };
  36.         System.out.println(arr[index - 1]);
  37.         sc.close();
  38.     }

  39.     public static void reverseArr(int[] arr) {
  40.         // TODO Auto-generated method stub
  41.         for (int x = 0; x < arr.length / 2; x++) {
  42.             int temp = arr[x];
  43.             arr[x] = arr[arr.length - x - 1];
  44.             arr[arr.length - x - 1] = temp;
  45.         }
  46.         method1(arr);
  47.     }

  48.     public static void getMax(int[] arr) {
  49.         // TODO Auto-generated method stub
  50.         int max = 0;
  51.         for (int x : arr) {
  52.             if (max < x) {
  53.                 max = x;
  54.             }
  55.         }
  56.         System.out.println(max);
  57.     }

  58.     public static void method1(int[] arr) {
  59.         // TODO Auto-generated method stub
  60.         for (int x : arr) {
  61.             System.out.println(x);
  62.         }
  63.         for (int x = 0; x < arr.length; x++) {
  64.             System.out.println(arr[x]);
  65.         }
  66.     }
  67. }
复制代码
2.二分查找
  1. package cn;
  2. /**
  3. * 二分查找。(针对有序数组,不要为了用二分查找,而排序)
  4. * @author cz
  5. *
  6. */
  7. public class Test6 {
  8.     public static void main(String[] args) {
  9.         int[] array={1,2,3,5,6,8,9};
  10.         System.out.println(binarySearch(6,array));
  11.     }

  12.     public static int binarySearch(int i, int[] array) {
  13.         // TODO Auto-generated method stub
  14.         int max=array.length-1;
  15.         int min=0;
  16.         int mid=(max+min)/2;
  17.         while(i!=array[mid]){
  18.             if(i>array[mid]){
  19.                 min=mid+1;
  20.             }else if(i<array[mid]){
  21.                 max=mid-1;
  22.             }
  23.             mid=(max+min)/2;
  24.             
  25.         }
  26.         return mid;
  27.     }
  28. }
复制代码
3、排序
  1. package cn;
  2. /**
  3. * 冒泡排序和选择排序
  4. * @author cz
  5. *
  6. */
  7. public class Test4 {
  8.     public static void main(String[] args) {
  9.         int[] array={1,32,23,11,67,9};
  10.         bubbleSort(array);
  11.         selectSort(array);
  12.         for(int x:array){
  13.             System.out.println(x);
  14.         }
  15.     }

  16.     public static void bubbleSort(int[] array) {
  17.         // TODO Auto-generated method stub
  18.         for(int x=0;x<array.length;x++){
  19.             for(int y=0;y<array.length-x-1;y++){
  20.                 if(array[y]>array[y+1]){
  21.                     int temp=array[y];
  22.                     array[y]=array[y+1];
  23.                     array[y+1]=temp;
  24.                 }
  25.             }
  26.         }
  27.         
  28.     }

  29.     public static void selectSort(int[] array) {
  30.         // TODO Auto-generated method stub
  31.         for(int x=0;x<array.length;x++){
  32.             for(int y=x+1;y<array.length;y++){
  33.                 if(array[x]>array[y]){
  34.                     int temp=array[x];
  35.                     array[x]=array[y];
  36.                     array[y]=temp;
  37.                 }
  38.             }
  39.         }
  40.     }
  41. }
复制代码
4、二维数组遍历
  1. package cn;

  2. /**
  3. * 二维数组的遍历。
  4. * 公司年销售额求和
  5. *        某公司按照季度和月份统计的数据如下:单位(万元)               
  6. *        第一季度:22,66,44
  7. *        第二季度:77,33,88
  8. *        第三季度:25,45,65
  9. *        第四季度:11,66,99
  10. *杨辉三角。
  11. *1
  12. *1 1
  13. *1 2 1
  14. *1 3 3 1
  15. *1 4 6 4 1
  16. *1 5 10105 1
  17. * @author cz
  18. *
  19. */
  20. public class Array2 {
  21.     public static void main(String[] args) {
  22.          int[][] arr = new int[][] { { 1, 3, 5 }, { 2, 4, 6 } };
  23.          getArray(arr);
  24.         // getArr2(6);
  25.     }

  26.     public static void getArray(int[][] arr) {
  27.         // TODO Auto-generated method stub
  28. //         int sum = 0;
  29.         for (int[] array : arr) {
  30.             for (int x : array) {
  31.                  System.out.println(x);
  32. //                sum += x;
  33.             }
  34.         }
  35.         for (int x = 0; x < arr.length; x++) {
  36.             for (int y = 0; y < arr[x].length; y++) {
  37.                 if (arr[x][y] == 0) {
  38.                     break;
  39.                 }
  40.                 System.out.print(arr[x][y] + "\t");
  41.             }
  42.             System.out.println();
  43.         }
  44.         // System.out.println(sum);
  45.     }

  46.     public static void getArr2(int n) {
  47.         int[][] arr = new int[n][n];
  48.         for (int x = 0; x < arr.length; x++) {
  49.             arr[x][0] = 1;
  50.             arr[x][x] = 1;
  51.         }

  52.         for (int x = 2; x < arr.length; x++) {
  53.             for (int y = 1; y <= x - 1; y++) {
  54.                 arr[x][y] = arr[x - 1][y] + arr[x - 1][y - 1];
  55.             }
  56.         }
  57.         getArray(arr);
  58.     }
  59. }

复制代码






点评

不要忘了写必要的注释噢,其他都非常棒!加油!  发表于 2015-5-13 11:55

评分

参与人数 1技术分 +3 黑马币 +6 收起 理由
温暖的小白 + 3 + 6 很给力!

查看全部评分

回复 使用道具 举报
笔记内容: 数组及数组内存的划分
笔记来源:毕向东JavaSE基础视频05,(我下载的视频上面是这样的,没有第几天)
正文:我的全写在代码里


  1. package cxw.study.one;


  2. import org.junit.Test;

  3. public class Array {
  4.         /*
  5.          * 内存的划分:
  6.          * 寄存器
  7.          * 本地方法区
  8.          * 方法区
  9.          * 栈内存
  10.          *                存储的都是局部变量
  11.          *                而且变量所属的作用域一旦结束,该变量就自动释放
  12.          * 堆内存
  13.          *                 存储是数组和对象(其实数组就是对象) 凡是new建立在堆中
  14.          *                 特点:
  15.          *                1.每一个实体都有首地址值
  16.          *                2.堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同,
  17.          *                      整数是0,小数是0.0或者0.0f boolean false char '\u0000'
  18.          *      3.垃圾回收机制
  19.          */
  20.        
  21.         /**
  22.          * 折半查找
  23.          * 二分查找法
  24.          */
  25.         @Test
  26.         public void halfSearch(){
  27.                 int[] array = {11, 13, 15, 19, 28, 33, 45, 78, 106};
  28.                 int index = 0;
  29.                 int key = 11;
  30.                 int max, min, mid;
  31.                 min = 0;
  32.                 max = array.length;
  33.                 mid = (min + max) / 2;
  34.                
  35.                 while(array[mid] != key){
  36.                         if(key > array[mid]){
  37.                                 min = mid + 1;
  38.                         } else if(key < array[mid]){
  39.                                 max = mid - 1;
  40.                         }
  41.                         if(max < min){
  42.                                 index =  -1;
  43.                                 System.out.println( key + "的下标为:" + index);
  44.                                 break;
  45.                         }
  46.                         mid = (max + min) / 2;
  47.                 }
  48.                 if(index != -1){
  49.                         index = mid;
  50.                         System.out.println( key + "的下标为:" + index);
  51.                 }
  52.         }
  53.         /*
  54.                   冒泡排序 :基本思想是每次进行相邻的两个数对比a(i)>a(i+1),然后将两个数交换
  55.                   int[] array = { 34, 19, 11, 109, 3, 56, 1, 99, 123, 112, 564 };
  56.                  排序的步骤:
  57.                  第1步[19, 11, 34, 3, 56, 1, 99, 109, 112, 123, 564]
  58.                 第2步[11, 19, 3, 34, 1, 56, 99, 109, 112, 123, 564]
  59.                 第3步[11, 3, 19, 1, 34, 56, 99, 109, 112, 123, 564]
  60.                 第4步[3, 11, 1, 19, 34, 56, 99, 109, 112, 123, 564]
  61.                 第5步[3, 1, 11, 19, 34, 56, 99, 109, 112, 123, 564]
  62.                 第6步[1, 3, 11, 19, 34, 56, 99, 109, 112, 123, 564]
  63.                 第7步[1, 3, 11, 19, 34, 56, 99, 109, 112, 123, 564]
  64.                 第8步[1, 3, 11, 19, 34, 56, 99, 109, 112, 123, 564]
  65.                 第9步[1, 3, 11, 19, 34, 56, 99, 109, 112, 123, 564]
  66.                 第10步[1, 3, 11, 19, 34, 56, 99, 109, 112, 123, 564]
  67.                 所以最终的结果为
  68.                 [1, 3, 11, 19, 34, 56, 99, 109, 112, 123, 564]
  69.          */
  70.         @Test
  71.         public void bubbleSort(){
  72.                 int[] array = { 34, 19, 11, 109, 3, 56, 1, 99, 123, 112, 564 };
  73.                 System.out.println("原数组:");
  74.                 printArray(array);
  75.                 for(int i = 0; i < array.length - 1; i++){
  76.                         for(int j = 0; j < array.length - 1 - i; j++){
  77.                                 if(array[j] > array[j+1]){
  78.                                         int temp = array[j];
  79.                                         array[j] = array [j+1];
  80.                                         array[j+1] = temp;
  81.                                 }
  82.                         }
  83.                         printArray(array);
  84.                 }
  85.         //        printArray(array);
  86.         }
  87.         /*
  88.                   选择排序:基本思想是每次循环将此次循环的最值放到后面
  89.                  int[] array = { 34, 19, 11, 109, 3, 56, 1, 99, 123, 112, 564 };
  90.                  步骤如下:
  91.                 
  92.                 第1步        [1, 34, 19, 109, 11, 56, 3, 99, 123, 112, 564]
  93.                 第2步        [1, 3, 34, 109, 19, 56, 11, 99, 123, 112, 564]
  94.                 第3步        [1, 3, 11, 109, 34, 56, 19, 99, 123, 112, 564]
  95.                 第4步        [1, 3, 11, 19, 109, 56, 34, 99, 123, 112, 564]
  96.                 第5步        [1, 3, 11, 19, 34, 109, 56, 99, 123, 112, 564]
  97.                 第6步        [1, 3, 11, 19, 34, 56, 109, 99, 123, 112, 564]
  98.                 第7步        [1, 3, 11, 19, 34, 56, 99, 109, 123, 112, 564]
  99.                 第8步        [1, 3, 11, 19, 34, 56, 99, 109, 123, 112, 564]
  100.                 第9步        [1, 3, 11, 19, 34, 56, 99, 109, 112, 123, 564]
  101.                 第10步[1, 3, 11, 19, 34, 56, 99, 109, 112, 123, 564]
  102.                 所以最终的结果为
  103.                 [1, 3, 11, 19, 34, 56, 99, 109, 112, 123, 564]                         
  104.          */
  105.         @Test
  106.         public void selectSort() {
  107.                 int[] array = { 34, 19, 11, 109, 3, 56, 1, 99, 123, 112, 564 };
  108.                 System.out.println("原数组:");
  109.                 printArray(array);
  110.                 for (int i = 0; i < array.length - 1; i++) {
  111.                         for (int j = i + 1; j < array.length; j++) {
  112.                                 if (array[i] > array[j]) {
  113.                                         int temp = array[i];
  114.                                         array[i] = array[j];
  115.                                         array[j] = temp;
  116.                                 }
  117.                         }
  118.                         printArray(array);
  119.                 }
  120.                 //printArray(array);
  121.         }

  122.         /**
  123.          * 遍历数组
  124.          *
  125.          * @param array
  126.          */
  127.         public void printArray(int[] array) {
  128.                 System.out.print("[");
  129.                 for (int i = 0; i < array.length; i++) {
  130.                         if (i != array.length - 1) {
  131.                                 System.out.print(array[i] + ", ");
  132.                         } else {
  133.                                 System.out.println(array[i] + "]");
  134.                         }
  135.                 }
  136.         }
  137.         /**
  138.          * 折半查找
  139.          * 二分查找法
  140.          */
  141.         @Test
  142.         public void halfSearch_2(){
  143.                 int[] array = {13, 15, 19, 28, 33, 45, 78, 106};
  144.                 int index = -1;
  145.                 int key = 33; //要查找的数
  146.                 int max, min, mid;
  147.                 min = 0;
  148.                 max = array.length;
  149.                 while(min <= max){
  150.                         mid = (max + min) / 2;
  151.                         if(array[mid] == key){
  152.                                 index = mid;
  153.                                 System.out.println( key + "的下标为:" + index);
  154.                                 break;
  155.                         }
  156.                         if(key > array[mid]){
  157.                                 min = mid + 1;
  158.                         } else if(key < array[mid]){
  159.                                 max = mid - 1;
  160.                         }
  161.                 }
  162.                 if(index == -1){
  163.                         System.out.println( key + "的下标为:" + index);
  164.                 }
  165.         }
  166. }
复制代码
回复 使用道具 举报
anywayDo 发表于 2015-5-13 00:08
笔记内容:数组
        笔记来源:毕向东Java基础视频第4天
        正文:

恩恩。。排版的话,因为是word做的笔记,所以比较凌乱。。见谅哈。

点评

在提交帖子之前可以检查一下哦!不然笔记太乱了!  发表于 2015-5-13 19:25
回复 使用道具 举报
本帖最后由 李工 于 2015-5-14 07:40 编辑

笔记内容:数组与二维数组
        
笔记来源:毕向东Java基础视频第4天
      
正文:
         
******************************************** 数组 **********************************************

【定义】:数组本质上是多个同类型数据的集合,数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素。


【使用方法】:

    声明和创建:
    方法一:
            type[] 数组名 = new type[数组中元素的个数];
            比如:
            int[] a = new int[10];
        方法二:
            type[] 数组名 = new type[]{逗号分隔的初始化值};
          比如:
          int[] a = {1,2,3,4};
          int[] a = new int[]{1,2,3,4};
   
  数组元素的引用:
         arrayName[index]
         其中index为数组下标,它可以为整型常数或表达式。如a[3],b(i为
         整型),c[6*i]等。下标 从0开始,一直到数组的长度减1。数组元素的下
         标从0开始;长度为n的数组的合法下标取值范围为:0~n-1;
数组的长度:
        arrayName.length的值即为数组的长度。

输出一个数组:
  1. int[] intArray = { 1, 2, 3, 4, 5 };  
  2. String intArrayString = Arrays.toString(intArray);  //Arrays.toString代表将数组转化为字符串
  3. System.out.println(intArrayString);  
  4. //结果为 [1, 2, 3, 4, 5]  
复制代码

移除一个数组:
  1. int[] intArray = { 1, 2, 3, 4, 5 };  
  2. int[] removed = ArrayUtils.removeElement(intArray, 3); //将原数组进行元素删除操作并将结果赋值给一个新数组
  3. System.out.println(Arrays.toString(removed));  
复制代码

数组的升序排列:
  1. import java.util.Arrays;
  2. public class ArraysSort {
  3.         public static void main(String args[]){
  4.                 int[] a={1,4,-1,5,0};
  5.                 Arrays.sort(a);    //数组a[]的内容变为{-1,0,1,4,5}
  6.                 for(int i=0;i<a.length;i++)
  7.                         System.out.println(a[i);
  8.         }
  9. }
复制代码

数组的复制算法:
  1. public class ArraysCopy {
复制代码

【二维数组】:二维数组的定义:
  type arrayName[ ][ ];
  type [ ][ ]arrayName;
二维数组的初始化:
1.静态初始化
    int intArray[ ][ ]={{1,2},{2,3},{3,4,5}};
Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。

2.动态初始化
1) 直接为每一维分配空间,格式如下:
    arrayName = new type[arrayLength1][arrayLength2];
    int a[ ][ ] = new int[2][3];

3) 例:
二维简单数据类型数组的动态初始化如下:
    int a[ ][ ] = new int[2][ ];
    a[0] = new int[3];
    a[1] = new int[5];
对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。而且,必须为每个数组元素单独分配空间。例如:
    String s[ ][ ] = new String[2][ ];
    s[0]= new String[2];//为最高维分配引用空间
    s[1]= new String[2]; //为最高维分配引用空间
    s[0][0]= new String("Good");// 为每个数组元素单独分配空间
    s[0][1]= new String("Luck");// 为每个数组元素单独分配空间
    s[1][0]= new String("to");// 为每个数组元素单独分配空间
    s[1][1]= new String("You");// 为每个数组元素单独分配空间

二维数组元素的引用:
对二维数组中的每个元素,引用方式为:
    arrayName[index1][index2]


【冒泡排序】:

  1. public class BubbleSort {
  2.         public static  void main(String[] args){
  3.                 int[] arr={1,4,3,7,14,9,66,33,20,122,65,76};
  4.                 for(int i=0;i<arr.length-1;i++){
  5.                         for(int j=0;j<arr.length-1;j++){
  6.                                 if(arr[j]<arr[j+1]){
  7.                                         int t=arr[j];
  8.                                         arr[j]=arr[j+1];
  9.                                         arr[j+1]=t;
  10.                                  }
  11.                         }
  12.                 }
  13.                 for(int i=0;i<arr.length;i++){
  14.                         System.out.println(arr[i]);
  15.                 }
复制代码







回复 使用道具 举报
V_nan 中级黑马 2015-5-13 22:01:53
7#
本帖最后由 V_nan 于 2015-5-15 21:45 编辑

笔记内容:数组的重要点
            笔记来源:毕向东Java基础视频第4天 正文:
-------------------------------------------------------
数组的理解:
数组的基本解释:数组本身是一种引用类型,一个数组定义好后,数组长度和存储空间是不变的。
数组的定义格式: a:  int[] arr
                             b: int arr[]     这两种方法定义格式推荐使用a,a定义格式阅读性强,b的话跟定义变量的形式有点相似,容易混淆
数组的初始化:数组的初始化分两种方式,一种为静态初始化,直接将数组中的元素列举出来 int[] arr = {1,5,6,2,......};
                           一种为动态初始化,只定义数组的长度,初始化值使用系统的默认初始化值  int[] arr = new int[length];
                          这里的默认初始化值:整数类型的默认初始化值为0,浮点类型的为0.0,字符类型为'\u0000',布尔类型为false,引用类型为null
数组的使用:数组的使用也可以说是对数组角标的操作吧(当然这句话是不对的···),数组索引是从0开始的到length-1,超出其中的值会编译失败
                     提示数组角标越界。数组是一个实体,所以存储在堆内存中,具体怎么的就描述不出来了,只会用,不会说。
数组的一些操作:选择排序,冒泡排序,折半查找,等等的在Java提供的Array类中的static修饰的方法,可以创建对象调用方法,代码就不发了···
                   来上基础班的时候把自学的代码都删除掉了从头开始写起,现在刚上完循环,还没接触到数组,就先不写了,如果需要的话明天补上今天终于学完数组了,补上代码求分啊
         自己弄的个工具类,文档注释不熟,求教版主,最后两个方法的return注释要怎么写?

································································································································································································
  1.         /**
  2.          *  本类是数组的工具类,包含:选择排序,冒泡排序,获取数组元素索引,获取数组最大值等等功能。
  3.          *        @author 0508
  4.          *        @version 1.0
  5.          */

  6. public class ArrayTool
  7. {
  8.         /**
  9.          *        这个方法是用来给给定数组进行排序:将数组中的元素从小到大排序。
  10.          *        @param        arr        int类型的数组。
  11.          */
  12.         public static void selectSort(int[] arr)
  13.         {
  14.                 for(int x=0;x<arr.length;x++)
  15.                 {
  16.                         for(int y=x+1;y<arr.length;y++)
  17.                         {
  18.                                 temp(arr,x,y);
  19.                         }
  20.                 }
  21.         }
  22.         /**
  23.          *        这个方法是用来给给定数组进行排序:将数组中的元素从小到大排序。
  24.          *        @param        arr        int类型的数组。
  25.          */
  26.         public static void bubbleSort(int[] arr)
  27.         {
  28.                 for(int x=0;x<arr.length;x++)
  29.                 {
  30.                         for(int y=0;y<arr.length-x-1;y++)
  31.                         {
  32.                                 temp(arr,y,y+1);
  33.                         }
  34.                 }
  35.         }
  36.         /**
  37.          *        这个方法是用来给给定数组中指定的两个索引中的元素进行互换。
  38.          *        @param        arr        int类型的数组。
  39.          *        @param        x        int类型的整数。
  40.          *        @param        y        int类型的整数。
  41.          */
  42.         public static void temp(int[] arr,int x,int y)
  43.         {
  44.                 if(arr[x]>arr[y])
  45.                 {
  46.                         int temp = arr[x];
  47.                         arr[x] = arr[y];
  48.                         arr[y] = temp;
  49.                 }
  50.         }
  51.         /**
  52.          *        该方法用于获取给定数组中的元素中的最大值。
  53.          *        @param        arr        int类型的数组。
  54.          *        @return        arr[maxIndex]        返回一个int类型的整数。
  55.          */
  56.         public static int getMax(int[] arr)
  57.         {
  58.                 int maxIndex = 0;
  59.                 for(int x=1;x<arr.length;x++)
  60.                 {
  61.                         if(arr[x]>arr[maxIndex])
  62.                         {
  63.                                 maxIndex = x;
  64.                         }
  65.                 }
  66.                 return arr[maxIndex];
  67.         }
  68.         /**
  69.          *        该方法用于获取给定数组中的元素中的最大值的索引
  70.          *        @param        arr        int类型的数组。
  71.          *        @return        maxIndex        返回一个int类型的整数。
  72.          */
  73.         public static int getMaxIndex(int[] arr)
  74.         {
  75.                 int maxIndex = 0;
  76.                 for(int x=0;x<arr.length;x++)
  77.                 {
  78.                         if(arr[x]>arr[maxIndex])
  79.                         {
  80.                                 maxIndex = x;       
  81.                         }
  82.                 }
  83.                 return maxIndex;
  84.         }
  85.         /**
  86.          *        该方法用于打印给定的数组。
  87.          *        @param        arr        int类型的数组。
  88.          */
  89.         public static void printArr(int[] arr)
  90.         {
  91.                 System.out.print("arr={");
  92.                 for(int x=0;x<arr.length;x++)
  93.                 {
  94.                         if(x == arr.length-1)
  95.                         {
  96.                                 System.out.println(arr[x]+"}");
  97.                         }
  98.                         else
  99.                         {
  100.                                 System.out.print(arr[x]+",");
  101.                         }
  102.                        
  103.                 }
  104.         }
  105.         /**
  106.          *        该方法用于获取给定数值在给定数组中出现的索引
  107.          *        @param        arr        int类型的数组。
  108.          *        @param        key        int类型的整数。
  109.          *        @return -1        返回-1表示输入的数值有误。
  110.          *        @return x        返回一个int类型的整数。
  111.          */
  112.         public static int getIndex(int[] arr,int key)
  113.         {
  114.                 for(int x=0;x<arr.length;x++)
  115.                 {
  116.                         if(arr[x] == key)
  117.                         {
  118.                                 return x;
  119.                         }
  120.                 }
  121.                 return -1;
  122.         }
  123.         /**
  124.          *        该方法用于获取给定数值在给定数组中出现的索引
  125.          *        @param        arr        int类型的数组。
  126.          *        @param        key        int类型的整数。
  127.          *        @return -1        返回-1表示输入的数值有误。
  128.          *        @return mid        返回一个int类型的整数。
  129.          */
  130.         public static int getIndex_(int[] arr,int key)
  131.         {
  132.                 int min = 0;
  133.                 int max = arr.length-1;
  134.                 int mid = (min+max)/2;
  135.                 for(int x=0;x<arr.length;x++)
  136.                 {
  137.                         if(arr[mid] == key)
  138.                                 return mid;
  139.                         else if(arr[mid]>key)
  140.                                 max = mid-1;
  141.                         else
  142.                                 min = mid+1;
  143.                         if(max<min)
  144.                                 return -1;
  145.                         mid = (min+max)/2;
  146.                 }
  147.                 return mid;
  148.         }
  149. }
复制代码
····················································································
二维数组:
概念:可以看成是一个一维数组不过其中的元素也是数组
定义格式:int[][] arr = new int[n][m]//n可以看成是行数,即有n个一维数组,m可以看成是列数,即每个一维数组中有m个数组元素
                  int[][] arr = new int[n][]//每个一维数组中的元素不确定,可以自己定义
                  int[][] arr = {{},{},{},······}//习惯称这个为列举法···
附一个题目,跟自己写的代码,可能很繁琐,自己优化不来了
  1. /*
  2.         0  1  2  3  4                                 

  3.         1  2  3  4  5    0
  4.         16 17 18 19        6         1
  5.         15 24 25 20 7         2
  6.         14 23 22 21 8         3
  7.         13 12 11 10 9    4
  8. */
  9. import java.util.Scanner;
  10. class Test4
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 Scanner sc = new Scanner(System.in);
  15.                 System.out.println("请输入需要打印的反螺旋矩阵的行数");
  16.                 while(true)
  17.                 {
  18.                         int size = sc.nextInt();
  19.                         int[][] arr = new int[size][size];
  20.                         int n=size,k=0;
  21.                         int m = (n+1)/2;
  22.                         for (int i=0;i<n;i++)
  23.                         {
  24.                                 for(int j=i;j<=n-1-i;j++)
  25.                                         arr[i][j] = ++k;
  26.                                 for(int j=i+1;j<=n-1-i;j++)
  27.                                         arr[j][n-i-1] = ++k;
  28.                                 for(int j=i;j<n-1-i;j++)
  29.                                         arr[n-1-i][n-2-j] = ++k;
  30.                                 for(int j=i+1;j<n-i-1;j++)
  31.                                         arr[n-j-1][i] = ++k;
  32.                         }
  33.                         for (int i = 0; i < n; i++)
  34.                         {
  35.                                 for (int j = 0; j < n; j++)
  36.                                         System.out.print(arr[i][j] + "\t");
  37.                                 System.out.println("");
  38.                         }
  39.                 }
  40.         }
  41. }
复制代码




回复 使用道具 举报
V_nan 中级黑马 2015-5-13 22:03:22
8#
V_nan 发表于 2015-5-13 22:01
笔记内容:数组的重要点
            笔记来源:毕向东Java基础视频第4天
            正文:

晕倒,更新漏洞卡了一下,直接回复了····版主,咋办,能重写吗?

点评

可以重新编辑  发表于 2015-5-14 16:56
回复 使用道具 举报
记内容:数组(静态初始化-常见问题)
         笔记来源:毕向东Java基础视频第四天
        正文:

第一种定义格式:(数据不明确)
int[] arr =new int[2];//还是这样写比较好。
Arr[0] = 90;
Arr[1] = 80;

也可以这样写
int arr[]=new int[2];

第二种定义格式:(数据明确时用)
int[]  arr = new int[]{3,1,6,5,4};//静态的初始化方式,很直观的能看里面的元素。
                注意:能在内存中开辟空间,但一定不要中括号里写内容,容易出错。
也可以这样写
int[] arr ={3,1,6,5,4};//是一种简化方式。

数组在操作中常见问题:(掌握)
int[] arr = new int[3];
System.out.println(arr[3]);
      注意:角标是从零开始的[0][1][2].
            编译时不报错,只检查语法有错误没。
            只有运行时在内存中开辟空间,发现不存在,这时就该报错了。
            (ArryIdexOutOfBoundsException: 3 ://数组角标异常越界:访问到了数组中不存在的角标。)

  int[] arr = new int[3];
  arr = null;  //不具备任何实体。
  System.out.println(arr[1]);
              编译时不报错,只检查语法有错误没。
              (NullPointerException:空指针异常:当引用没有任何指向值null的情况,该引用还在于操作实体。)
回复 使用道具 举报
笔记内容:数组的几个重要练习
笔记来源:毕向东Java基础视频第4天;
正文:
         在学习毕老师的数组的这一部分的知识时,个人觉得老师在课上讲的那几个数组的练习非常重要,不仅对算法思想有较高的提高,而且对之后的课程学习都有很大的帮助。
一、获取最值(以最大值为例)思路:
        1,获取最值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。通过一个变量进行临储。
        2,让数组中的每一个元素都和这个变量中的值进行比较。如果大于了变量中的值,就用该该变量记录较大值。
        3,当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了。
  1. public static int getMax(int[] arr){
  2.                 int max = arr[0];
  3.                 for(int x=1; x<arr.length; x++){
  4.                         if(arr[x]>max)
  5.                                 max = arr[x];
  6.                 }
  7.                 return max;
  8.         }
复制代码

二、数组排序(选择排序和冒泡排序)
1,选择排序,将元素与之后的所有元素比较,用到循环,第一圈最值出现在首元素位置,以此类推。
  1. public static void selectSort(int[] arr){
  2.                 for (int x=0; x<arr.length-1 ; x++){
  3.                         for(int y=x+1; y<arr.length; y++){
  4.                                 if(arr[x]>arr[y]){
  5.                                         int temp = arr[x];
  6.                                         arr[x] = arr[y];
  7.                                         arr[y]= temp;
  8.                                 }
  9.                         }
  10.                 }
  11.         }
复制代码

2,冒泡排序,相邻的两个元素进行比较,如果符合条件换位。第一圈最值出现在最后一位。
  1. public static void bubbleSort(int[] arr){
  2.                 for(int x=0; x<arr.length-1; x++){                                                                       
  3.                         for(int y=0; y<arr.length-x-1; y++)/*-x:让每一次比较的元素减少,-1:避免角标越界。*/{
  4.                                 if(arr[y]<arr[y+1]){
  5.                                         int temp = arr[y];
  6.                                         arr[y] = arr[y+1];
  7.                                         arr[y+1] = temp;
  8.                                 }
  9.                         }
  10.                 }
  11.         }
复制代码

当然,位置互换位置是可以单独封装的,此处先不表。
三、数组反转。(根据角标,首尾相换,首元素递增,尾元素递减,角标条件判断很关键)
  1. public static void reverseArray(int[] arr){
  2.                 //start和end的判断是重点
  3.                 for(int start=0,end=arr.length-1; start<end ; start++,end--){
  4.                         int temp = arr[start];
  5.                         arr[start] = arr[end];
  6.                         arr[end] = temp;
  7.                 }
复制代码

四、数组查找(普通查找和这般查找)
普通查找,对数组遍历,获取要查找的数的位置,如果没有返回-1
  1. public static int getIndex(int[] arr,int key){
  2.                 for(int x=0; x<arr.length; x++){
  3.                         if(arr[x]==key)
  4.                                 return x;
  5.                 }
  6.                 return -1;
  7.         }
  8. }
复制代码

折半查找。比普通查找效率高,但必须保证数组的元素有序。
  1. public static int halfSearch(int[] arr,int key){
  2.                 int min = 0,max = arr.length-1,mid;
  3.                 while(min<=max){
  4.                         mid = (max+min)>>1;
  5.                         if(key>arr[mid])
  6.                                 min = mid + 1;
  7.                         else if(key<arr[mid])
  8.                                 max = mid - 1;
  9.                         else
  10.                                 return mid;
  11.                 }
  12.                 return -1;
  13.         }
复制代码

五、利用数组进行进制转换(利用查表法进行十进制转换十六进制)
查表法:将所有的元素临时存储起来。建立对应关系。
  1. public static void toHex(int num){
  2.                 char[] chs = {'0','1','2','3'
  3.                                 ,'4','5','6','7'
  4.                                 ,'8','9','A','B'
  5.                                 ,'C','D','E','F'};
  6.                
  7.                 //定义一个临时容器。
  8.                 char[] arr = new char[8];
  9.                 int pos = arr.length;
  10.                 while(num!=0){
  11.                         //每一次&15后的值作为索引去查建立好的表。就可以找对应的元素。
  12.                         int temp = num & 15;
  13.                         arr[--pos] = chs[temp];
  14.                         num = num >>> 4;
  15.                 }       
  16.                 //存储数据的arr数组遍历。
  17.                 for(int x=pos;x<arr.length; x++)
  18.                 {
  19.                         System.out.print(arr[x]+",");
  20.                 }
  21.         }
复制代码

虽然有了对象之后可以对上述的各种功能直接进行调用,但对上述的理解练习有利于加强对算法的提高,及时学习了面向对象,但算法依然不能忽视!
回复 使用道具 举报
本帖最后由 urankwong 于 2015-5-15 21:12 编辑

笔记内容:数组
笔记来源:刘然 java基础视频第5天
里面有些错别字,请忽略
******************我***是***分***割***线************************
数组:
        1,2,3,4,5
        概述:存储多个 同一种类型的元素的容器。
        好处:可以对数组中的元素进行编号,从0开始。方便我们来操作。
        数组的定义格式:
                元素类型[] 数组名 = new 元素类型[数组的长度或者元素个数];
                new:申请内存空间。
                int[] arr = new int[5];
        怎么获取数组中的元素?
                第一个:arr[0];
                                arr[1];
                                arr[2];        
        内存的一个划分:
                栈:存的是局部变量。
                        局部变量:定义在方法中或者方法的形式参数上的变量。
                        当变量使用完毕后(超出了变量的作用域),直接从内存消失。
                堆:存的是new出来的东西(实体)。
                        1、每一个实体都有地址值。
                        2、每一个实体都有默认值。
                                整数:0
                                小数:0.0
                                字符:'\u0000'
                                布尔:false;
                        3、在不确定的时间被垃圾回收器(GC)给回收调。
                方法区:方法,String常量池,静态区,byte常量池。
                了解:
                        本地方法区:和系统相关的内容。
                        寄存器:有CPU来分配资源的。
        定义数组的四种方式:此处以int类型举例
                A: int[] arr = new int[5];   //定义一个int类型的数组,arr。
                B: int arr[] = new int[5];   //定义一个int类型的arr数组。
                C: int[] arr = new int[]{1,2,3,4,5};
                D:        int[] arr = {1,2,3,4,5};
                        arr[0],arr[2]
        推荐使用:
                A,D

数组的常见操作:
        数组的长度: 数组名.length
                长度: 从1-数组名.length
                索引: length - 1;
        数组的遍历;
               
  1. for(int x=0;x<arr.length;x++)
  2.                 {
  3.                         System.out.println(arr[x]);
  4.                 }
复制代码

        
        数组的求最大值:
               
  1. /**1、定义一个变量max记录最大值。
  2.                 2、遍历数组,拿到每一个元素,然后依次来跟最大值比较。
  3.                         如果遍历到的元素,比最大值大,把该元素的值赋值给max。
  4.                 3、将最大值返回。
  5. */
  6.                 int[] arr = {1,2,3,4,5};
  7.                 int max = arr[0];   //我们假设数组中的第一个元素是最大值。
  8.                 for(int x=0;x<arr.length;x++)
  9.                 {
  10.                         //arr[x]就是数组中的元素

  11.                         if(arr[x]>max)    //判断当前遍历到的元素是否比最大值大,
  12.                                                           //如果比最大值还大,就将该值赋值给max
  13.                         {
  14.                                 max = arr[x];
  15.                         }
  16.                 }
  17.                 System.out.println(max);  //输出最大值。
复制代码


        数组的基本查找功能:
            
  1. /** 1、定义一个变量记录要查找的值。 key
  2.                 2、遍历数组,拿到每一个元素,然后依次来跟key比较。
  3.                         如果相等,即返回该元素的索引(小标,下标)。
  4.                         如果不相等,返回-1;
  5. */

  6.                 int[] arr = {1,2,3,8,4,5,8};
  7.                 int key = 8;
  8.                 //int index = -1;   //记录的就是我要找的key在数组中的索引
  9.                 //int[] arrIndex = new int[arr.length];
  10.                 for(int x=0;x<arr.length;x++)
  11.                 {
  12.                         //arr[x]就是数组中的元素

  13.                         if(arr[x]==key)                                                            
  14.                         {
  15.                                 index = x;
  16.                                 break;
  17.                                 //arrIndex[x] = x;
  18.                         }
  19.                 }
复制代码


二维数组:
        概述:就是每个元素都是一维数组 的数组。
        A:int[][] arr = new int[n][m];
                n:可以看做是行。 代表arr这个二维数组有多少个一维数组。
                m:可以看做是列。 代表每一个一维数组中有多少个元素。
        B:int[][] arr = new int[n][];
                n:可以看做是行。 代表arr这个二维数组有多少个一维数组。
                第二个中括号的意思是:每个一维数组的长度不固定。
        C:int[][] arr = { {1,2,3},{4,5},{7,8,9}};
        
遍历:
        二维数组的长度:
                arr.length
        每个一维数组的长度:
                arr[x].length
        每个二维数组的元素:
                arr[x][y]
应用:
        计算商场的年销售额。
回复 使用道具 举报
V_nan 中级黑马 2015-5-15 21:46:18
12#
版主,补完自己总结的了,求打赏
回复 使用道具 举报
本帖最后由 791008594 于 2015-5-15 23:49 编辑

笔记内容:数组
笔记来源:毕向东java基础视频第5
正文:
一、数组定义
1,什么是数组:数组是存储同一种类型的多个元素的容器。
2,数组的优点:存入数组的元素是有序的,所有元素从存入开始都会从0开始分配空间,方便我们获取;
二、数组格式的定义及初始化的方法:
定义方式1
数据类型[] 数组名;(推荐使用的标准格式)
      初始化方式1.1()int[] arr = new int[5];
      初始化方式1.2()int[] arr = new int[]{1,2,3,4,5};
      初始化方式1.3()int[] arr = {1,2,3,4,5};
定义方式2
数据类型 数组名[];(不推荐使用此格式)
      初始化方式2.1()int arr[] = new int[5];
      初始化方式2.2()int arr[] = new int[]{1,2,3,4,5};
      初始化方式2.3()int arr[] = {1,2,3,4,5};
三、数组在java的内存图:
详细见图5-1
四、常见操作及举例:
1,数组的赋值
举例:1arr[0]=10;
      2int[] arr = new int[]{1,2,3,4,5};
      3int[] arr = {1,2,3,4,5};
2,获取数组的长度
例如:arr.length
3,数组的遍历
int[] arr={12,34,45,76};
   for (int i = 0; i< arr.length; i++) {
      int j = arr;
      System.out.println(j);
   }
4,获取最值
//传入一个数组
public staticint getMax(int[] arr){
//定义变量记录最大值
      int max = 0;
      for (int x = 0; x < arr.length; x++) {
            if(arr[x]>max)
                 max= arr[x];
           }
      return max;//返回一个最值
}
5,数组元素所在位置的查找
//传入两个参数,一个基本类型参数一个引用类型参数
public staticint getIndex(int[] arr,int index){
      for (int x = 0; x < arr.length; x++) {
            if(arr[x]==index)
                 index= x;
           }
      return index;
}
6,修改数组中指定索引处的值
//传入两个参数,一个基本类型参数一个引用类型参数
public static booleanreviseNumber(int[] arr,int index){
      boolean flag = false
      for (int x = 0; x < arr.length; x++) {
            if(arr[x]==index)
                 flag = true
                 returnflag;
           }
      return flag;
}
五、二维数组:
二维数组:
第一个中括号代表行存储的是第二维数组的地址值,第二个中括号代表列存储的是实际数据;
详细见图5-2

定义及赋值的格式:
举例:
      A:int[][] arr = new int[2][3];
      B:int[][] arr = new int[4][];
      C:int[][] arr = {{1,2,3},{4,5},{9}};
输出操作:
举例:
int[][] arr ={{1,2,3},{4,5},{9,10,11}};
for (int i = 0; i< arr.length; i++) {
   for (int j = 0; j< arr.length; j++) {
      int number = arr[j];
         System.out.println(number);
   }
}
回复 使用道具 举报
非常对不起大家,图片调了很多次还是没调好,点进去应该可以看清楚,整理了1个小时左右,希望可以拿到技术分,因为我的分实在太低了,求版主大人打赏!!嘿嘿~~
回复 使用道具 举报
笔记内容:数组
        笔记来源:毕向东Java基础视频第4天
        正文:
一:数组的定义:同一种类型数据的集合。其实数组就是一个容器。

         格式1:元素类型[] 数组名 = new 元素类型[元素长度或数组个数];
             实例:int[] arr = new int[5];
         格式2:元素类型[] 数组名 = new 元素类型[]{元素,元素,元素……};
             示例:int[] arr = new int[]{2,4,7,5};
                   int[] arr = {6,3,8,9};
二:内存结构:栈内存,堆内存,方法区,本地方法区,寄存器。
          栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
          堆内存:1.数组和对象,通过new建立的实例都存放在堆内存中。
                       2.每一个实体都有内存地址值。
                       3.实体中的变量都有默认初始化值 (int:0 , double:0.0 , floot:0.0f  boolean:false)
                       4.实体不在被使用,会在不确定的时间内被垃圾回收器回收。  

           垃圾回收机制:数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个                                  不确定的时间被垃圾回收器释放掉。
三:静态初始化,常见问题.
           int[ ] arr =   和 int  arr[ ]      两种书写方式都正确。
           int[ ] arr = new int[ ]{3,7,4,8}  此时 [ ]中尽量不要写长度
           数组脚标越界异常(ArrayIndexOutOfBoundsException):
            int [ ] arr = new int [ 3 ];
            System.out.println(arr[3]);      可以编译成功,但是运行失败。  因为运行的时候,才会在堆内存中开辟空间
           操作数组时,访问到了数组中不存在的角标。
           空指针异常(NullPointerException):
           int[ ]  arr = null;
           System.out.println(arr[1]);
           arr引用没有指向实体,却在操作实体中的元素时。
四:遍历
         
  1. class ArrayDemo3
  2. {        public static void main(String[] args)
  3.         {
  4.                 //数组的操作
  5.                 //获取数组的元素,通常会用到遍历
  6.                 int arr[] = {9,4,56,19,7,5};
  7.                 printArray(arr);
  8.         }
  9.         // 定义一个功能:用于打印数组的元素。元素间用逗号隔开   1。没有结果 因为打印了 用void  2.有未知元素参与
  10.                 //数组中有一个元素可以直接获取数组的个数或者长度。 .length
  11.                 //int num = 0;
  12.                 //使用方式;数组名称.length =
  13.         public static void printArray(int[] arr)
  14.         {
  15.                 System.out.print("[");
  16.                 for(int x=0;x<arr.length;x++)
  17.                 {       
  18.                         //if(x<arr.length-1)
  19.                         if(x!=arr.length-1)
  20.                        
  21.                         System.out.print(arr[x]+",");
  22.                         else
  23.                        
  24.                         System.out.println(arr[x]+"]");

  25.                 }       
  26.                        
  27.         }
  28. }
复制代码
              需要注意的地方:
  1.                 System.out.println(arr);
  2.                 显示:[I@de6ced
  3.                 [ = 数组
  4.                 I = int
  5.                 de6ced = 数组内存存放地址  由哈希算法算出来的哈希值,十六进制数
复制代码
五:获取最值:
  1. /*
  2. 给定一个数组  {3,5,1,7,9,6} 打印出数组中的最大值

  3. */

  4. class ArrayTest
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 int[] arr = new int[]{3,5,1,7,9,6};
  9.                 double[] arrd = new double[]{5.4,6.9,8.8,2.6,5.1};
  10.                 int max = getMax(arr);
  11.                 double maxd = getMax(arrd);
  12.                 System.out.println("Max = "+max);
  13.                 System.out.println("Max = "+maxd);
  14.         }


  15.         /*
  16.         给定一个数组  {3,5,1,7,9,6} 打印出数组中的最大值

  17.         步骤:
  18.         1,定义一个函数,遍历数组,先定义一个变量,赋值,可以为数组中的任何一个数值
  19.         2,其他数组值和改值进行比较,然后如果比该值大,那么就赋值给这个变量。
  20.         3,在主函数中调用这个函数,打印输出。

  21.         定义函数:
  22.         1.判断函数是否有返回值:有,返回int类型。
  23.         2.是否有未知参数:有,函数需要接受数组。定义参数类型为 int[]
  24.         */

  25.         //第一种方法。
  26.         //第二种方法:临时变量可以初值化为0吗?  答案是可以的,因为数组中的每一个元素都对应一个标号。
  27.         //所以 用临时变量储存标号即可。
  28.        
  29.         public static int getMax(int[] arr)
  30.         {
  31. //                int max = arr[0];
  32.                 int max = 0;
  33.                 for(int x=1;x<arr.length;x++)
  34.                 {
  35. //                        if(max<arr[x])
  36. //                        {
  37. //                                max = arr[x];
  38. //                        }
  39.                         if(arr[max]<arr[x])
  40.                         {
  41.                        
  42.                                 max = x;
  43.                         }
  44.                 }
  45.                 return arr[max];
  46.         }


  47.         //利用第二种方法,求出double类型的数组的最大值。
  48.         //此时我们可以定义一个 同名但是 有不同参数类型的 getMax进行重载操作
  49.         // 我们假设给定的数组为{5.4,6.9,8.8,2.6,5.1}
  50.         public static double getMax(double[] arr)
  51.         {
  52.                 int max = 0;
  53.                 for(int x=1;x<arr.length;x++)
  54.                 {
  55.                         if(arr[max]<arr[x])
  56.                         {
  57.                                 arr[max] = arr[x];
  58.                         }
  59.                 }
  60.                 return arr[max];
  61.         }

  62.        
  63. }
复制代码
六:选择排序和冒泡排序:
  1. import java.util.*;
  2. /*
  3. 选择排序  {8,5,1,9,4,7}
  4. 给定数组,按照从小大的顺序排列。

  5. */
  6. class  ArrayTest2
  7. {


  8.         public static void main(String[] args)
  9.         {
  10.                 int[] arr = new int[]{8,5,1,9,4,7};
  11.                 //排序前
  12.                 printArray(arr);
  13.                 //选择排序
  14. //                selectSort(arr);
  15.                 //冒泡排序
  16.                 bubbleSort(arr);
  17.                 //排序后
  18.                 printArray(arr);
  19.                
  20.                 //java中已经定义好的一种排序方式,开发中,对数组排序,要使用该局代码
  21.                 Arrays.sort(arr);
  22.                
  23.                

  24.         }

  25.         //冒泡排序
  26.         public static void bubbleSort(int[] arr)
  27.         {
  28.                 for (int x=0;x<arr.length-1;x++ )
  29.                 {
  30.                         for (int y=0;y<arr.length-x-1 ;y++ )
  31.                         {
  32.                                 if (arr[y]>arr[y+1])
  33.                                 {
  34.                                         /*
  35.                                         int temp = arr[y+1];
  36.                                         arr[y+1] = arr[y];
  37.                                         arr[y] = temp;
  38.                                         */
  39.                                         swap(arr,y,y+1);
  40.                                 }
  41.                         }
  42.                 }
  43.        


  44.         }
  45.        
  46.         //选择排序
  47.         //内循环结束一次,最值出现在头角标位置上。
  48.         public static void selectSort(int[] arr)
  49.         {
  50.                
  51.                 for (int x = 0;x<arr.length-1 ;x++ )
  52.                 {
  53.                         for (int y=x;y<arr.length-1 ;y++ )
  54.                         {
  55.                                 if (arr[x]>arr[y+1])
  56.                                 {
  57. //                                        int temp = arr[x];
  58. //                                        arr[x] = arr[y+1];
  59. //                                        arr[y+1] = temp;
  60.                                         swap(arr,x,y+1);  //自己在操作中误写成   swap(int[] arr,int x,int y+1); 需要注意
  61.                                 }
  62.                         }
  63.                 }
  64.         }

  65.         //不论什么排序都需要 对满足条件的元素进行位置的置换,所以可以将这部分代码单独的提取出来。单独封装成一个函数。
  66.         //该函数中应该有3个未知函数,因为在获取角标的前提是,先要确定数组。所以,需要定义三个参数, int[] arr,int a ,int b
  67.         //置换功能
  68.         public static void swap(int[] arr,int a,int b)
  69.         {
  70.                 int temp = arr[a];
  71.                 arr[a] = arr[b];
  72.                 arr[b] = temp;
  73.         }

  74.         //打印数组
  75.         public static void printArray(int[] arr)
  76.         {       
  77.                 System.out.print("数组为 "+"[ ");
  78.                 for (int x=0;x<arr.length ;x++ )
  79.                 {
  80.                         if (x!=arr.length-1)
  81.                                 System.out.print(arr[x]+"  ");
  82.                         else
  83.                                 System.out.println(arr[x]+" ]");
  84.                 }
  85.                
  86.         }
  87. }
复制代码
七:折半查找
  1. /*
  2. 折半查找
  3. 数组 {3,8,9,16,20,35}
  4. 折半查找 数组必须是有序的
  5. */


  6. class  ArrayTest4
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 //查找 20在元素中的位置
  11.                 int[] arr = new int[]{3,8,9,16,20,35};
  12. //                int index = getIndex(arr,35);
  13. //                int index = halfSearch(arr,35);
  14.                 int index = halfSearch_2(arr,35);
  15.                 System.out.println("index = "+index);
  16.         }


  17.         /*
  18.         步骤:
  19.         1,定义3个变量,记录每次比较实际的最大值,最小值和中间值的角标。max min mid
  20.         2,遍历数组,
  21.         3,使用mid的值,于需要查找的值比较,判断大小。
  22.         4,比较完大小之后,重新定义所查找的范围。使用循环语句,继续比较,知道查到改值。
  23.         5,如果改值不存在,那么返回 -1。

  24.         定义一个函数,方便该功能的复用性。
  25.         1,因为是返回数组中数值的角标,所以返回值类型为int
  26.         2,因为是查找某一数值,同时数组不确定,所以又两个参数, int[] arr,int x
  27.         */
  28.         //折半查找
  29.         public static int halfSearch(int[] arr,int key)
  30.         {
  31.                 int max = arr.length-1;
  32.                 int min = 0;
  33.                 int mid = (max+min)/2;
  34.                
  35.                 while(key!=arr[mid])  //写代码过程中,误将arr[mid]写成 mid   !!!!!
  36.                 {
  37.                         if(key<arr[mid])
  38.                                 max = mid-1;
  39.                         else if(key>arr[mid])
  40.                                 min = mid+1;       
  41.                         if(min>max)
  42.                                 return -1;
  43.                         mid = (max+min)/2;

  44.                 }
  45.                 return mid;
  46.         }

  47.         //折半查找的第二种方法。
  48.         public static int halfSearch_2(int[] arr,int key)
  49.         {
  50.                 int min,max,mid;
  51.                 min = 0;
  52.                 max = arr.length-1;
  53.                 while (min<max)            //第一次书写,min<max 正确写法是  min<=max  需要注意。
  54.                 {
  55.                         mid = (min+max)>>>1;
  56.                         if (key>arr[mid])
  57.                                 min = mid + 1;
  58.                         else if(key<arr[mid])
  59.                                 max = mid - 1;
  60.                         else
  61.                                 return mid;
  62.                 }
  63.                 return -1;
  64.         }
  65.        

  66.         //数组查找,给定一个数组,判断在数组中的位置
  67.         public static int getIndex(int[] arr,int key)
  68.         {
  69.                 for (int x=0;x<arr.length ;x++ )   //书写代码过程中,误将arr.length写成arr.length-1    !!!!!
  70.                 {
  71.                         if (key==arr[x])
  72.                         {
  73.                                 return x;
  74.                         }
  75.                 }
  76.                 return -1;
  77.        
  78.        
  79.         }
  80. }
复制代码



由于字数限制,分为两个来发帖了
回复 使用道具 举报
八:查表法二进制终结版本:
  1. class ArrayTest7
  2. {
  3. public static void main(String[] args)
  4. {
  5. toBin(0);
  6. toOct(60);
  7. toHex(-60);
  8. }

  9. //十进制转二进制
  10. public static void toBin(int num)
  11. {
  12. trans(num,1,1);
  13. }

  14. //十进制转八进制
  15. public static void toOct(int num)
  16. {
  17. trans(num,7,3);
  18. }
  19. //十进制转十六进制
  20. public static void toHex(int num)
  21. {
  22. trans(num,15,4);
  23. }
  24. //代码功能的提取。
  25. public static void trans(int num,int base,int offset)
  26. {

  27. //如果给的数值为0 的话,那么 整个函数就停止运转
  28. //所以要对0进行判断
  29. if (num == 0)
  30. {
  31. System.out.println(0);
  32. return;
  33. }
  34. char[] chs = {'0','1','2','3','4'
  35. ,'5','6','7','8','9'
  36. ,'A','B','C','D','E','F'};

  37. char[] arr = new char[32];

  38. int pos = arr.length;
  39. while (num!=0)
  40. {
  41. int temp = num & base;
  42. arr[--pos] = chs[temp];
  43. num = num >>> offset;
  44. }

  45. for (int x = pos;x <arr.length ; x++)
  46. {
  47. System.out.print(arr[x]);
  48. }
  49. System.out.println();
  50. }
  51. }
复制代码
九:二维数组:数组中的数组。

       格式:   
                  格式1:int[ ][ ] arr = new int[3][4];

  •   定义了名称为arr的二维数组
  • 二维数组中有3个一维数组
  • 每一个一维数组中有4个元素
  • 一维数组的名称分别为arr[0], arr[1], arr[2]
  • 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 56;
                  格式2:int[][] arr = new int[3][];

                     二维数组中有3个一维数组
                     每个一维数组都是默认初始化值null
                     可以对这个三个一维数组分别进行初始化
                     arr[0] = new int[3];
                     arr[1] = new int[4];
                     arr[2] = new int[5];
                  格式3:int[][] arr = {{3,8,2,6},{2,7,8,3},{9,0,1,6}};  
         联系:一个公司有3个小组,求该公司一年中,所有小组,4个季度的业绩综合。
  1. class ArrayTest8
  2. {
  3. public static void main(String[] args)
  4. {
  5. int[][] arr ={{3,2,5,7},{9,1,6,3},{6,6,4,3}};
  6. int sum = getSum(arr);
  7. System.out.println("该公司3个小组,4个季度的业绩综合为 = " +sum);
  8. }

  9. //定义一个功能。计算该公司 3个小组,4个季度的业绩综合。
  10. public static int getSum(int[][] arr)
  11. {
  12. int sum = 0;
  13. for (int x=0;x<arr.length ;x++ )
  14. {
  15. for (int y=0;y<arr[x].length ;y++ )
  16. {
  17. sum += arr[x][y]; //书写过程中 ,写成arr[y],错误提醒,数组类型不能和int类型相加,顿悟。改为arr[x][y]
  18. }
  19. }
  20. return sum; //书写过程中 忘记写返回语句
  21. }
  22. }
复制代码


             注意    int[ ][ ] arr = new int[2][3];
                      System.out.println(arr);       ------->输出结果为   [[@de6ced   
                      System.out.println(arr[0]);    ------>输出结果为   [[@de7eca     要注意都是内存地址值
                       int[][]  arr = new int[3][];
                       System.out.println(arr);       ------->输出结果为   [[@de6ced
                       System.out.println(arr[0]);    ------->输出结果为    null
                      数组为引用数据类型,没有初始化,默认初始化值为 null     

评分

参与人数 1技术分 +3 黑马币 +4 收起 理由
温暖的小白 + 3 + 4

查看全部评分

回复 使用道具 举报
本帖最后由 麦兜是个猪 于 2015-6-5 11:21 编辑

笔记内容:数组
笔记来源:毕向东java基础第4天
    一维数组

    概念:数组就是存储同一种数据类型的集合,是一个容器,它可以对容器内的数据从0开始,进行编号,用于封装这些数据,是一个实体。

    格式:

        元素类型[] 数组名 = new 元素类型[元素个数或者数组的长度];

        元素类型[] 数组名 = {元素1,元素2......};

        数组其实还有其他的形式,但上面两种最常用,对于其他格式,这里不在赘述。

    引入两个内存的知识点:栈内存和堆内存。

        栈内存:存储局部变量,数据使用完毕后,会自动释放。

        堆内存:内存每一个实体,数组和对象都在对内存中。

        堆内存的特点:1,内存地址值;

                               2,默认初始化值,int:0,float型:0.0f,double型:0.0,

                                boolean型:false;

                               3,垃圾回收机制:不定时自动回收。

    二维数组

    概念:

        其实就是将数组作为元素存到数组当中,构成的数组称为二维数组。

    格式:

        格式一:int[][] arr= new int[5][6];

        代表这个数组中有5个一维数组,每一个一位数组中有6个元素,我们要表示某一个元素在数组中的位置可以写成:arr[0][1],这代表的是0角标上的一维数组1角标上的元素。

        格式二:int[][] arr= new int[5][];

        格式三:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};

        格式三是直接把一维数组中的元素都初始化了。

    数组中的常见操作

    遍历:获取数组中的元素通常都会用到遍历。

    数组中有一个属性,可以直接获取到数组中的元素个数:length,使用方式:数组名称.length。

    但凡有数组通常都会用到for循环。

    下面是对着数组进行遍历的代码:


  1. class ArrayDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr ={2,3,4,5,6,6,7,8,9,88};
  6.                 printArray(arr);//打印出来的结果是[2,3,4,5,6,6,7,8,9,88]。

  7.         }
  8. //定义功能用于打印数组中的元素。元素间用逗号隔开。
  9.         public static void printArray(int[] arr)
  10.         {
  11.                 System.out.print("[");
  12.                 for(int x = 0;x<arr.length;x++)
  13.                 {
  14.                         if (x!=arr.length-1)
  15.                         {
  16.                                 System.out.print(arr[x]+", ");
  17.                         }
  18.                         else
  19.                                 System.out.println(arr[x]+"]");//这是最后一个元素。
  20.                 }
  21.                 System.out.println();//换行。
  22.         }
  23. }
复制代码
    为了代码看着清晰以下的内容,思路都会写在外边。

    获取数组中的最大值和最小值:

    获取最值需要进行比较。每一比较都会有一个较大或者较小的值,因为该值不确定,可以通过一个变量进行临时存储让数组中的每一个元素都和这个值进行比较,当我们要获取最大值时,如果在数组中遍历到的值大于变量中的值,就用改变量记录较大的值;当所有的元素都比较完成,变量中存储的就是数组中的最大值,获取最小值同理。

    其实我们将这个变量定义成数组的一个角标,或者这个角标上所对应的值都可以,我选择其中一种方法,直接将变量定义成数组0角标上的值。


  1. /*
  2. 需求:获取数组中的最大最小值
  3. */
  4. class ArrayDemo2
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 int[] arr ={2,1,3,6,4,7,9,6};
  9.                 int max = getMax(arr);
  10.                 int min = getMin(arr);
  11.                 System.out.println("min="+min);
  12.                 System.out.println("max="+max);
  13.         }        
  14.         public static int getMax(int[] arr)
  15.         {
  16.                 int max = arr[0];//定义一个变量,并将数组中0角标的值赋给这个变量。
  17.                 for(int x = 1;x<arr.length;x++)     
  18.                 {
  19.                         if(max<arr[x])
  20.                                 max=arr[x];//比较后,将较大的值赋给max变量。
  21.                 }
  22.                 return max;
  23.         }
  24.         
  25.         public static int getMin(int[] arr)
  26.         {
  27.                 int min = arr[0];//定义一个变量,并将数组中0角标的值赋给这个变量。
  28.                 for(int x = 1;x<arr.length;x++)
  29.                 {
  30.                         if(min>arr[x])
  31.                                 min =arr[x];//比较后,将较小的值赋给min变量。
  32.                 }
  33.                 return arr[min];
  34.         }
  35. }
复制代码
回复 使用道具 举报
本帖最后由 麦兜是个猪 于 2015-6-5 11:32 编辑

数组中的选择排序和冒泡排序:

    选择排序:选择一个位置和其他位置比较,在选择下一个位置和剩下的位置比较,内循环结束一次最值出现在头角标位置上。

    我们用下边的一个例子来说明,这是我们要进行选择排序的数组:【49 38 65 97 76 13 27 49】


    第一次排序后 13 【38 65 97 76 49 27 49】

    第二次排序后 13 27 【65 97 76 49 38 49】

    第三次排序后 13 27 38 【97 76 49 65 49】

    第四次排序后 13 27 38 49 【49 97 65 76】

    第五次排序后 13 27 38 49 49 【97 97 76】

    第六次排序后 13 27 38 49 49 76 【76 97】

    第七次排序后 13 27 38 49 49 76 76【 97】

    这样就比较直观了,很明显是嵌套循环尖朝下的结构,所以我们可以改变内循环的初始化值,让初始化值随着外循环变化。

    冒泡排序:数组中相邻的两个元素进行比较,如果符合条件,换位,第一圈比较完后,最值出现在最后一位,第二圈比完后,最值出现在倒数第二位......,循环比较,除了每次比较完的最后一个,因为那一个已经是之前进行比较的一组的最值了,下次不需要在纳入比较的范围之内。

    学的时候就在想为什么要叫冒泡排序,原来是因为随着循环的对这些数进行位置置换,最值会慢慢的浮出来,所以才叫冒泡的吧。

    下面是冒泡排序和选择排序的代码:


  1. /*
  2. 需求:对数组进行选择排序和冒泡排序。上边已经详细的说过这两个排序,所以在代码里就不写思路和步骤了。
  3. */
  4. class ArraySort
  5. {
  6.         public static void main(String[] args)
  7.        {
  8.             int[] arr = {12,345,21,3,13,34,2,1};
  9.             printArray(arr);//偷个懒,遍历数组前边已经写了方法,这里直接用吧,在这打印排序前的数组。
  10.            //int[] arr1 = selectSort(arr);//选择排序验证了,没有问题。
  11.           int[] arr1 = bubbleSort(arr);
  12.          printArray(arr1);
  13.       }
  14.      //选择排序
  15.     public static int[] selectSort(int[] arr){
  16.     for(int x=0;x<arr.length-1;x++)
  17.     {
  18.             for(int y=x+1;y<arr.length;y++)
  19.            {
  20.                   if(arr[x]>arr[y])
  21.                  {
  22.                       swap(arr,x,y);
  23.                 }
  24.          }
  25.    }
  26.    return arr;
  27. }
  28. //冒泡排序
  29.        public static int[] bubbleSort(int[] arr){
  30.            for(int x=0;x<arr.length-1;x++)
  31.            {
  32.                  for(int y=0;y<arr.length-x-1;y++)//-x:每次比较完,都会一个确定的值不用再参加下一次比较;-1:是为了防止角标越界。
  33.                  {
  34.                         if(arr[y]>arr[y+1])
  35.                        {
  36.                             swap(arr,y,y+1);
  37.                        }
  38.                }
  39.         }
  40.        return arr;
  41.    }
  42.         public static void swap(int[] arr,int x,int y)//这个是位置置换功能。
  43.        {
  44.                int temp = arr[x];
  45.                arr[x] = arr[y];
  46.                arr[y] = temp;
  47.       }
复制代码

    数组的查找操作:

    折半查找:首先一定要保证要进行查找的数组是有序的,先定义两个变量,一个赋值为0角标,作为最小值,一个赋值为最后一个角标,作为最大值 再定义一个变量,存储最小值与最大值的一半,也就是数组的中间位置,然后将已知的值与中间位置元素的值进行比较,如果比中间元素的值大,则将最小值赋值为中间值加1,继续取最小值与最大值的中间值元素与已知元素进行比较,如果比中间元素的值小,则将最大值赋值为中间值减1,继续取最小值与最大值的中间值元素与已知元素进行比较,如果比较到最后最小值已经大于最大值了,说明这个元素在数组中不存在,这时我们返回-1。

    代码如下:我把两个方法都写进去,其实都是差不多的。


  1. /*
  2. 折半查找
  3. */
  4. class ArrayBinarySearch
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                  int[] arr = {3,11,23,34,45,56,76,87};//注意,这个数组一定要是有序的。
  9.                  int num = binarySearch(arr,23);
  10.                  System.out.println("num="+num);
  11.         }
  12.         public static int binarySearch(int[] arr,int key)
  13.         {
  14.                //方法一
  15.              /*
  16.              int min,max,mid;
  17.              max = arr.length-1;
  18.              min = 0;
  19.              mid = (max+min)/2;
  20.              while(arr[mid]!=key)
  21.              {
  22.                     if(key>arr[mid])
  23.                     min = mid+1;
  24.                     else if(key<arr[mid])
  25.                     max = mid-1;
  26.                     if(min>max)
  27.                          return -1;//这种情况说明这个数没找到。
  28.                    mid = (max+min)/2;
  29.            }
  30.            return mid;
  31.            */
  32.            //方法二
  33.            int min,max,mid;
  34.            min = 0;
  35.            max = arr.length-1;
  36.            while(min<=max)
  37.             {
  38.                    mid = (max+min)/2;
  39.                    if(key>arr[mid])
  40.                    min = mid+1;
  41.                    else if(key<arr[mid])
  42.                    max = mid-1;
  43.                    else
  44.                    return mid;
  45.            }
  46.           return -1;//如果我们要把一个数插入到数组中,把这里改成return min;就可以了。
  47.      }
  48. }
复制代码

    进制转换:

    直接上查表法吧:将所有的元素临时存储起来,建立对应关系,将每次做完&运算的值(&的值根据你要转换的进制而定,&15是转16进制,&7是转8进制,&1是转二进制)作为索引去查表,就可以查到对应的元素,然后再将这个值右移(位数由你要转的进制而定,16进制4位,8进制3位,2进制1位)。下面是代码:


  1. /*
  2. 查表法十进制----十六进制
  3. */
  4. class ToHexDemo
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                toHexCha(45,15,4);
  9.         }
  10.         public static void toHexCha(int num,int yushu,int weiyi)
  11.         {
  12.               char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  13.        //方法一 直接查表打印
  14.        /*
  15.        for(int x=0;x<8;x++)
  16.        {
  17.              int temp = num & yuShu;
  18.              System.out.print(chs[temp]);
  19.              num = num>>>weiyi;
  20.       }
  21.       */
  22.       //方法二 StringBuilder容器
  23.       /*StringBuilder sb = new StringBuilder();
  24.        for(int x=0;x<8;x++)
  25.        {
  26.             int temp = num & yushu;
  27.             num = num>>>weiyi;
  28.             sb.append(chs[temp]);
  29.       }
  30.       System.out.println(sb.reverse());
  31.      */
  32.       //方法三 存到数组中
  33.       char[] arr = new char[8];
  34.       int pos = arr.length-1;//arr.length;
  35.       while(num!=0)
  36.       {
  37.              int temp = num & yushu;
  38.              num = num>>>weiyi;
  39.              arr[pos--] = chs[temp];//arr[--pos];
  40.       }
  41.       for(int x=pos+1;x<arr.length;x++)//x=pos;
  42.       {
  43.              System.out.print(arr[x]);
  44.       }
  45.   }
  46. }
复制代码
    这些是我准备写到技术博客里的笔记,今天才看到这个帖子,不知道活动结束了没,不管怎么样,放在这里,弄不好我的这些笔记能对其他人有点作用,记得不好的地方也请各位大神不要喷。



评分

参与人数 1技术分 +3 黑马币 +2 收起 理由
温暖的小白 + 3 + 2

查看全部评分

回复 使用道具 举报
笔记内容:数组笔记来源:刘意java视频第5天
内容:上课的时候,跟着夯哥做的,后面还有学API 的时候,超哥给补充的选择排序。
       找了半天,代码太多了。翻不到。只提交理论知识啦。。
数组:
        概述:存储多个,同一种类型的元素的容器。
        好处:可以对数组的元素进行编号,从0开始。
        数组的定义格式:
                        元素类型[] 数组名 =  new 元素类型[数组长度和个数]
                        new; 申请内存空间。

        怎么获取数组中的元素:
                第一个:arr[0];
                第二个:arr[1];
                第三个:arr[2];

内存的划分:
        栈:存的是局部变量。
                        局部变量;定义在方法中,或者方法的形式参数上的。
                        特点:当变量使用完毕后(超出了变量的作用域。),直接从内存中释放。

        堆:存的是new出来的东西(实体)。
                        1、每一个实体都有地址值。
                        2、每一个实体都有默认初始化值。
                                整数:0
                                浮点:0.0
                                字符:'\u0000'
                                布尔:false
                        3、在不确定的时间被垃圾回收器( GC)回收掉。
        方法区:里面存储的:方法,String常量池,静态区。byte常量池。
        本地方法区:和系统相关的内容。
        寄存器:有CPU来分配资源的。
定义数组的四种方式:此处以Int类型举例
        A: int[] arr = new int[5];//定义一个int类型的数组 arr
        B:  int arr[] = new int[5];//定义一个int类型的 arr数组
        c:  int[] arr = new int[]{1,2,3,4};
        D:  int[] arr = {1,2,3,4,5};
        推荐  A  D


        数组的常见操作:
                1、数组的遍历:
                                数组名怎么求: 数组名.length
                                                长度:从1-数组名 .length
                                                索引:  length-1
                                  for (x =0 ;x <arr.length;x++)
                                  {
                                                System.out.println(arr[x]);
                                  }
                2、数组的求最大值:
                                数组的求最大值:
                1、定义一个变量max记录最大值。
                2、遍历数组,拿到每一个元素,然后依次来跟最大值比较。
                        如果遍历到的元素,比最大值大,把该元素的值赋值给max。
                3、将最大值返回。
                int[] arr = {1,2,3,4,5};
                int max = arr[0];   //我们假设数组中的第一个元素是最大值。
                for(int x=0;x<arr.length;x++)
                {
                        //arr[x]就是数组中的元素
                        if(arr[x]>max)    //判断当前遍历到的元素是否比max大,
                                                          //如果比最大值还大,就将该值赋值给max
                        {
                                max = arr[x];
                        }
                }
                System.out.println(max);  //输出最大值。
                3、数组的基本查找功能:
                        1、定义一个变量记录要查找的值。key
                        2、遍历数组,拿到每一个元素,然后依次来跟key来比
                                如果相等,即返回该元素的索引(下标)
                                如果不相等,返回 -1
数组常见错误:
  1. /*
  2.         数组操作的常见问题:
  3.                 A:数组越界异常。访问了不存在的索引。
  4.                         ArrayIndexOutOfBoundsException
  5.                
  6.                 B:空指针异常。一个实例(对象)已经不存在
  7.                         NullPointerException
  8. */
  9. class ArrayDemo3
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 //定义数组
  14.                 int[] arr = {1,2,3,4,5};

  15.                 //使用元素
  16.                 System.out.println(arr[3]);
  17.                 //System.out.println(arr[5]);

  18.                
  19.                 //错误的
  20.                 //int x = null;
  21.                 arr = null;
  22.                 System.out.println(arr[2]);
  23.         }
  24. }
复制代码



二维数组:
        概述;就是每个元素都是一维数组。
        A:int[][] arr = newunt[n][m];
                n:可以看做是行,代表arr这个二维数组有多少元素。
                m:可以看做是列。代表每一个一维数组中有多少个元素。
        B:int [][]arr = new int[n][];
                        n:可以看作是行。代表arr这个二维数组中有多少个一维数组。
                         第二个括号的意思是,每一个一维数组的长度不固定。
        C:int[][]arr = {{1,2,3}{1,2}{7,54}};

        二维数组的遍历:
                        二位数组的长度:
                                arr.length
                        每一个以为数组的长度:
                                arr[x].length
                        二维数组的元素。
                                arr[x][y]
        应用:
                计算上场的年销售额




回复 使用道具 举报
笔记内容:数组
笔记来源:毕向东Java基础视频第4天正文:
数组:
用来存储同一数据类型元素的容器。(数据类型可以是基本的 int、long、float、double、String娄型也可以是娄类型噢。娄类型存储的是对象的哈希修值)
下面我就用一个随机点名器来给大家演示下数组的运用吧,这个是昨天老师布置的作业,写的不好的、需要改进的 还请各位大神指出来啊
/**
        需求:
                制作一个随机点名器,程序运行一次后,输入1继续随机点名,输入0跳出程序

        思路:
                A:定义一个String娄数组,用于存储名单
                B:用Math.random()方法随机一个数,用这个数来指向对应名单的角标
                C:运行完一次后输入1则继续随机点名,输入0结束程序

*/
import java.util.Scanner;

class RandomDemo{
        public static void main (String[]args){

                //这里定义了一个字符串数组,用来存储全班同学的名字
                String[] name={"郭海飞","刘和平","覃奕丹","冯利","杨长树","姚聚龙","李映伟",
                                                "陈炎荣","王勇","封海","郑镇发","吴荣基","李林","朱亚林",
                                                "易子豪","阮汉斌","石刚","杨浪","林宏","邓华东","刘晨","张鹏",
                                                "张杨"," 杨明","欧阳帆","谢海尧","吴超超","张贻建","张晓宇","黄峰",
                                                "田植成","赖坚","郑嘉鑫","徐剑","郭坤鹏","邓少武","周木涨",
                                                "张龙盛","黄新荣","李琦","刘佳栋","金刁","张业涛","杨杰","李晓岑",
                                                "张建红","吴昊","彭敦","潘秋颖","胡淼","杨佳辉","李俊豫","林山淼",
                                                "李聪","唐骏方","刘裕楷","邝泽雨","田朝明","蓝天宏","黄洋","谭彭武",
                                                "李群杰","张勇","黄春","黄麒","皮德龙","李游","施斌","张臣","唐志文",
                                                "郑伟宁","吴忠园","魏锦誉","陈锋华", "李铁"};

                System.out.println("咱班一共有"+name.length+"人,下面开始点名");

                //因为后面需要键盘录入要用到Scanner这个娄,所在这里创建了一个Scanner对象

                Scanner sc = new Scanner(System.in);

                /**用于接受随机数,并将其当作角标指入对应角标元素*/
                int index;

                /**用于接收用户输入的数字,判定程序是否继续*/
                int num;
                do{
                        do{
                                /**这里调用了Math里的random()方法,random()方法是随即返回一个大于0但无限小于1的double类型的小数,这里将random()方法返回的值*100并加上0.1是取小数点后三位有效数字*/
                                index = (int)(Math.random()*100+0.1);
                        }
                        /**判断随机数是否超出数组长度,超出则重新随机一个数*/
                        while (index>=75);
                        /**把随机生成的数字当成索引,并输出索引对应的学生名字*/
                        System.out.println(name[index]);

                        System.out.println("是否继续点名?(1继续,0退出)");
                        /**接受键盘录入的数字并赋值给num*/       
                        num=sc.nextInt();
                        /**判断键盘录入的数字是不是1和0以外的数字*/
                        while(num!=1 && num!=0 ){

                                System.out.println("请不要输入1和0以后的数字,请重新输入");
                                /**如果键盘录入的是1和0以外的数字,则重新录入并再次赋值给num*/                       
                                num=sc.nextInt();
                        }
                /**判断输入数字是否为0,为0是退出,否则继续*/
                }while (num!=0);
                System.out.println("点名结束");
        }
}







评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
温暖的小白 + 1 + 3

查看全部评分

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