第六天-2017-05-08

来源:互联网 发布:淘宝潮男秋装 编辑:程序博客网 时间:2024/06/07 21:34

第六天

今日内容:数组

数组的定义

数组是一组数的组合,数组其实一种引用数据类型,数组里面必须存放的是相同的数据类型——数组是存放一组相同数据类型的一个组合。

  1. 数组是引用数据类型。
  2. 数组里面存放的数据必须是同一类型。

如何定义数组

静态初始化

方式一:

数据类型 [ ] 变量名 = {对应的数据类型的值1,对应的数据类型的值1,对应的数据类型的值1,......}

例如: 

int[] arr = {1,2,3,4,5,6,7,8,9};

方式二:

数据类型 [ ] 变量名= new 数据类型[]{对应的数据类型的值1,对应的数据类型的值1,对应的数据类型的值1,....};

例如:

int[] arr = new int[]{3,5,7,9,1,13};

动态初始化

所谓的动态初始化  其实是首先先声明数组的长度,之后分别给数组进行赋值。

例如:

String[] arr = new String[3];

总结:

对于动态初始化如果声明不同的数据类型的数字 数组里面会有对应类型的默认值。

默认初始化值:

  • int byte short long——0
  • char——‘\u0000’
  • boolean——false
  • float double——0.0
  • String——null

数组的使用

变量名[index]   其中index为数组对应的下标。

如何去取出数组中最后一个值   通过变量名[变量名.length - 1] 来获取  ,注意  数组最后一位的索引是变量名.length– 1 否则会报出异常(ArrayIndexOfBoundsException)。

数组的排序

冒泡排序

原理:比较两个相邻的元素,将直达的元素交换至右端。


class Demo6{public static void main(String[] args) {int[] arr = {34,12,45,87,1,44};for(int i = 0;i < arr.length-1;i++)//控制轮数{for(int j = 0;j< arr.length -i-1;j++)//控制比较的数{if(arr[j] > arr[j+1]){arr[j] = arr[j] ^ arr[j+1];arr[j+1] = arr[j] ^ arr[j+1];arr[j] = arr[j] ^ arr[j+1];}}}Demo5.printArr(arr);}}
(Demo5见最后)

选择排序

原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕


class Demo7{public static void main(String[] args) {int[] arr = {34,12,45,87,1,44};for(int i = 0;i < arr.length-1;i++){for(int j = i + 1;j < arr.length;j++ ){if(arr[i] > arr[j]){arr[i] = arr[i] ^ arr[j];arr[j] = arr[i] ^ arr[j];arr[i] = arr[i] ^ arr[j];}}}Demo5.printArr(arr);}}
(Demo5见最后)

插入排序

原理:从数组的第一个元素a[0]开始,将其后一个元素a[1]插入到a[0]的前面或者后面,接着继续这一过程。每次都是将a[i]插入到已经排序好的a[0]~a[i-1]中合适的位置。


class Demo8{public static void main(String[] args){int[] arr = {34,12,45,87,1,44};for(int i = 1 ; i < arr.length ; i++)//控制轮次      从脚标1开始{for(int j = i ; j > 0 ; j--)//脚标j = i =1开始与前一个开始比较,第一轮1与0,第二轮2与1,然后1与0(都是脚标){if(arr[j] < arr[j-1]){arr[j] = arr[j] ^ arr[j-1];arr[j-1] = arr[j] ^ arr[j-1];arr[j] = arr[j] ^ arr[j-1];}}}Demo5.printArr(arr);}}


自己补充

Demo5

/*int arr[] = {3,4,45,65,6}变为{3,4,65,6,0}*/class Demo5{public static void main(String[] args) {int arr[] = {3,4,45,65,6};for(int i = 0;i < arr.length;i++){if(i != arr.length -1){arr[i] = arr[i+1];}}arr[arr.length-1] =0;printArr(arr);}public static void printArr(int[] x)//数组的遍历{System.out.print("[ ");q:for(int i = 0;i <x.length;i++){if(i == x.length-1){System.out.println(x[i] + " ]");break q;}System.out.print(x[i]+" , ");}}}

  • main的参数列表必须是String[ ];
  • JVM寻找main函数,但是为什么其他以main为方法名,定义int[ ] a的参数列表并不报错?

因为主方法的参数列表必须是String[],如果不是JVM不将它视为主函数的入口,只视为是函数(方法)的重载。

  • 数组长度方法:

int [] arr = new int[3];int len = arr.length;

  • 字符串的长度方法:

String str = "abcdefg";int len = str.length();







0 0
原创粉丝点击