2016.08.03
上课内容:数组
首先,什么是数组?
数组是具有相同数据类型的一组数据的组合。列如:球类的集合——足球,羽毛球,网球。电器的集合——电视,电脑,洗衣机。数组中的每个数据具有相同的数据类型。
然后,数组是基本数据类型还是引用数据类型?
基本数据类型有byte int short char long boolean float double 八种基本数据类型
故数组是引用类型
数组有什么方法和属性?
属性:长度,方法:全部继承Object
另外,数组是具有连续的线性数据结构,数组的长度一旦定义就无法更改,列如要是我们开辟了一个长度为10的数组array,当我们引用array[10]时,就会报错说数组溢出,即出现ArrayIndexOutOfBoundsException(数据越界)
数组的应用很广泛,一般来说数组使用来存储数据,也可以利用数组来来对数据进行排序。 数组可以存储的数据类型有很多比如说图片、旦整数、字符串等,虽然可以存很多的数据类型,但是 每一个数组都只能存同一个数据类型的数据。这就像是商店里买的饼干一样,饼干盒里装的只能是 饼干,不可能给你装个苹果或桔子,这是生产商定以好的,不能更改的。数组也是这样的一你定 义好了数据类型就不能在传别的数据类型的数据进去,否则会报错。
数组的定义
一维数组:数据类型 [] 数组名 = new 数据类型[长度]; 这种方式定义的数组,只有数据类型的默认值
int [] array = new int [10];
数据类型 [] 数组名 = {数据,...};
int [] array = {1,2,3,4,,5};
数据类型 [] 数组名 = new 数据类型[]{数据,...};
int [] array = new int []{1,2,3,4,,5};
数据类型 [] 数组名;
int [] array;
数组名 = new 数据类型[]{数据,...};
array[] = new int[]{1,2,3,4,,5};
数组名 = new 数据类型[长度];
二维数组:
数据类型 [][] 数组名 = new 数据类型[行][列]; 这种方式定义的数组,只有数据类型的默认值
int [][]array = new int [][];
数据类型 [][] 数组名 = {{数据,...},...};
int [][] array = {{1,2,3,},{2,3,4}};
数据类型 [][] 数组名 = new 数据类型[][]{{数据,...},...};
int [][] array = new array[][]{{1,2,3,},{2,3,4}};
数据类型 [][] 数组名;
int array [][] array;
数组名 = new 数据类型[][]{{数据,...},...};
array[][] = new int[][]{{1,2,3,},{2,3,4}};
数组名 = new 数据类型[行][列];
数组的使用,要想知道数组中能存储多少个元素,数组名.length length是数组唯一的一个属性,用来获取数组能存储多少元素的属性。
如果想给数组的某一个位置的赋值,则使用 数组名[下标] = 值;
如果要想获取某个位置的值,则使用 数据类型 变量名 = 数组名[下标];
二维数组的使用:
想知道二维数组中能存储多少个元素:
使用行数和列数的方式定义的数组:数组名.length ,数组名[行下标].length
使用值定义的数组: 数组名[行下标].length+......获取二维数组中的总行数:数组名.length
获取二维数组中某一行的总列数:数组名[行下标].length
想给数组某一个位置赋值:数组名[行下标][列下标] = 值;
获取某一个位置的值:数据类型 变量名 = 数组名[行下标][列下标];
练习
1.对一位数组排序
//冒泡法
public class MaoPaoSort{
public static void main(String[] args){
int array[] = {87,23,9,10,23,45,109};//定义一组数组
maopaoSort(array);
}
private static void maopaoSort(int[] array) {
int temp = 0;//定义已给临时变量
for(int i=0;i<array.length;i++){
for(int j=0;j<array.length-i-1;j++){
if(array[j]<array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
maopaoPrint(array);
}
private static void maopaoPrint(int[] before) {
for(int k=0;k<before.length;k++){
System.out.print(before[k]+" ");
}
}
}
//插入排序法
public class InsertSort {
public static void main(String[] args) {
int[] arr = {4,6,13,67,2,89,24,16};//定义数组
doInsertSort(arr);
}
private static void doInsertSort(int[] scr) {
int len = scr.length;//获取数组的长度
for(int i=1;i<len;i++){//遍历数组,从1开始
int j; //定义变量j
int temp = scr[i];//临时存储当前的数字
for(j=i;j>0;j--){//遍历1之前的数字
if(scr[j-1]>temp){
scr[j]=scr[j-1];
}else
break;
}
scr[j] = temp;//把空缺位置赋值为原有的值
}
print(scr);
}
private static void print(int[] before) {
for(int i=0;i<before.length;i++){//遍历
System.out.print(before[i]+" ");//打印,以空格隔开
}
System.out.println();//换行
}
}
//直接选择排序
public class SelectSort {
public static void main(String[] args){
int array[] = {89,23,45,18,60,108};
//创建数组排序类的对象
SelectSort ss = new SelectSort();
ss.sort(array);
}
/*
* 直接选择排序法
*/
private void sort(int[] array) {
int index;
for(int i=1;i<array.length;i++){
index = 0;
for(int j=1;j<=array.length-i;j++){
if(array[j]>array[index]){
index = j;
}
}
//交换在位置array.length-i和index(最大值)上的两个值
int temp = array[array.length-i]; //把第一个元素值保存到临时变量中
array[array.length-i] = array[index];//把第二个元素值保存到第一个元素单元中
array[index] = temp;//把临时变量也就是第一个元素原值保存到第二个元素中
}
PrintArray(array);
}
/*
* 显示数组中的所有元素
*/
private void PrintArray(int[] array) {
for(int i:array){
System.out.print(" " +i);
}
}
}
2.找出二维数组中最大的值,所有最大值所在的行和列
import java.util.Random;
//二维数组:随机赋值,找出最大值,输出值,行,列
public class Sort {
public static void main(String[] args){
int[][] array = new int[3][4];
Random r = new Random();
int max = 0;
//循环遍历最大值
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
array[i][j] = r.nextInt(10);
if(array[i][j]>max){
max = array[i][j];
}
}
}
System.out.println("最大值为:"+max);
//循环遍历最大值的行和列
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
if(array[i][j]==max){
System.out.println(" 第"+i+"行,第"+j+"列");
}
}
}
}
}