黑马程序员————学习笔记(第四天)

来源:互联网 发布:淘宝甩手掌柜工具箱 编辑:程序博客网 时间:2024/05/22 14:06

 —————————— ASP.Net+Android+IOS开发.Net培训、期待与您交流!——————————

数组的操作

  1.遍历

    获取数组中的元素

  练习代码:Demo01.java

/*遍历数组练习定义一个方法遍历已知数组并打印每个元素*/class Demo01{public static void main(String[] args) {int[] arr = {6,7,3,1,8,2,19};printArray(arr);}// 打印数组中每个元素public static void printArray(int[] arr){for (int x = 0; x < arr.length; x++){if (x != arr.length - 1)System.out.print(arr[x]+", ");elseSystem.out.println(arr[x]);}}}

  2.取最值

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

  练习代码:ArrayTest01.java

/*给定数组{1,5,6,8,12,3,4,9}需求:获取上面数组的最大值,最小值。最大值获取:思路:1.需要每一个元素进行比较,则可以定义一个第三方变量进行临时存储每次比较后的最大值。2.让数组中的每个元素都与这个变量进行比较,用变量存储较大的值。3.当每个元素比较完成,变量中的值就是最大值。步骤:1.定义变量,初始化值为数组的任意元素的值。2.通过循环对数组进行遍历。3.在遍历时进行判断,如果遍历到的元素的值大于变量值,就赋值给变量。*/class ArrayTest01{public static void main(String[] args) {int[] arr = {1,5,6,8,12,3,4,9};System.out.println("max = " + getMax(arr)); // 打印最大值System.out.println("min = " + getMin(arr)); // 打印最小值}/*获取最大值*/public static int getMax(int[] arr){int max = arr[0];for (int x = 1; x < arr.length; x++){if (max < arr[x])max = arr[x];}return max;}/*获取最小值*/public static int getMin(int[] arr){int min = arr[0];for (int x = 1; x < arr.length; x++){if (min > arr[x])min = arr[x];}return min;}}

  3.排序

    (1)选择排序

      特点:内循环结束一次,最值就出现在头角标位上。

    (2)冒泡排序

      特点:每比较一次,较小的数往前移,较大的数往后移,第一次比较完毕,最值确定在末尾。

    代码练习:ArrayTest02.java

/*对以下数组进行升序排序:{1,5,9,6,7,2,3}选择排序:思路:1.先用0角标元素与后面其他的元素比较一下,如果0角标元素较大,则往后排列。2.在用1角标元素和后面的元素进行比较。3.以此类推。。。步骤:1.定义一个功能,使用for循环嵌套,外循环与内循环的每个元素挨着比较。2.在比较过程中,用if条件语句判断当前比较的元素是否需要换位。3.排序完毕无需返回值,因为排序操作后的数组和应用的数组是同一个数组。冒泡排序:思路:1.第一圈,从第一个元素开始,每个元素与后面相邻的一个元素比较,较大的数放在后面,比较完毕后最大值就在最后角标。2.第二圈,再从第一个元素开始,但是这次不用比较最后一个角标元素。3.第三圈,也从第一个元素开始,但是这次不用比较最后一个和倒数第二个元素。4.以此类推。。。*/class ArrayTest02{public static void main(String[] args) {int arr[] = {1,5,9,6,7,2,3};printArray(arr);//selectSort(arr);bubbleSort(arr);printArray(arr);}// 选择排序public static void selectSort(int[] arr){for (int x = 0; x < arr.length - 1; x++){for (int y = x; y < arr.length; y++){if (arr[x] > arr[y]){swap(arr,x,y);}}}}// 冒泡排序public static void bubbleSort(int[] arr){for (int x = 0; x < arr.length - 1; x++){// -x:让每次比较的元素减少一个(末尾排列),-1:避免角标越界for (int y = 0; y < arr.length - x - 1; y++){if (arr[y] > arr[y+1]){swap(arr,y,y+1);}}}}// 位置置换public static void swap(int[] arr,int x,int 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]+", ");elseSystem.out.println(arr[x] + "]");}}}

  4.折半查找

    使用范围:有序的数组

    方法:给定一个字值,在数组中,(角标最小值+最大值)/2得到中间值,如果与该值不同则继续查找,直到找到为止。如果角标最小值大于了角标最小值,则数组中没有该值,应该返回-1,供给调用者处理。

 

  5.十进制转二进制

  练习代码:ArrayTest03.java

class ArrayTest03{public static void main(String[] args) {toBin(10);}/*需求:十进制转二进制*/public static void toBin(int num){StringBuffer sb = new StringBuffer(); // 存储数据的一个容器while (num > 0){sb.append(num%2); // 添加每次模2的值到容器内num = num /2;}System.out.println(sb.reverse()); // reverse为容器数据倒序方法}}

  6.十进制转十六进制和二进制

  练习代码:ArrayTest04.java

/*查表法十进制转十六进制和二进制*/class ArrayTest04{public static void main(String[] args) {//toHex(60);toBin(6);}public static void toHex(int num){char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};// 定义一个临时存储数组char[] arr = new char[8];int pos = arr.length;while (num != 0){int temp = num & 15;arr[--pos] = chs[temp];num = num >>> 4;}// 遍历数组for (int x = pos; x < arr.length; x++){System.out.print(arr[x] + ",");}}public static void toBin(int num){char[] chs = {'0','1'};char[] arr = new char[32];int pos = arr.length;while (num != 0){int temp = num & 1;arr[--pos] = chs[temp];num = num >>> 1;}for (int x = pos; x < arr.length; x++){System.out.print(arr[x]);}}}

  7.相同功能代码抽取

  练习代码:ArrayTest05.java

class ArrayTest05{public static void main(String[] args) {toHex(60);toBin(6);toBa(60);}// 转十六进制public static void toHex(int num){trans(num,15,4);}// 转二进制public static void toBin(int num){trans(num,1,1);}// 转八进制public static void toBa(int num){trans(num,7,3);}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 pos = arr.length;while (num != 0){int temp = num & base;arr[--pos] = chs[temp];num = num >>> offset;}for (int x = pos; x < arr.length; x++){System.out.print(arr[x]);}System.out.println();}}

二维数组

  定义:在一维数组中的一维数组。

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

  解释:

  1.在arr二维数组中,一共有3个一维数组

  2.每一个一维数组中共有两个int类型的元素。

  3.每个一维数组的名称分别为:arr[0] arr[1] arr[2]

  4.给第一个一维数组中角标为1的元素赋值为23的方法:arr[0][1] = 23


  格式2:int[][] arr = new int[3][];

  解释:

  1.二维数组中有3个一维数组

  2.每个一位数组的初始化值为null

  3.可以对每个一维数组进行初始化如:

  arr[0] = new int[3];

  arr[1] = new int[1];

  arr[2] = new int[4];


  练习代码:Array2Test01.java

/*对下列二维数组进行每个元素的累加{{3,4,1,2},{5,9,1,8},{2,4,7,9},{6,5,3,9}}思路:1.由于二维数组中的元素是一维数组,而想要得到的值在一维数组内,应该使用循环嵌套。2.在取得值后进行累加步骤:1.使用外循环遍历每个一维数组2.使用内循环遍历每个一维数组中的每个元素3.定义一个变量参与进行内循环累加操作*/class Array2Test01{public static void main(String[] args) {int[][] arr = {{3,4,1,2},{5,9,1,8},{2,4,7,9},{6,5,3,9}};int sum = 0;for (int x = 0; x < arr.length; x++){for (int y = 0; y < arr[x].length; y++){sum = sum + arr[x][y];}}System.out.println("sum = " + sum);}}

  一般格式:

  int[][] arr;

  int arr[][];

  int[] arr[];


  特殊格式:

  int[] x,y[];

  解释:x为一维数组,y为二维数组。

  就好比:

  int x,y;

  拆分后是

  int x;

  int y;

  所以int[] x,y[];

  拆分后

  int[] x;

  int[] y[];


 —————————— ASP.Net+Android+IOS开发.Net培训、期待与您交流!——————————
0 0
原创粉丝点击