黑马程序员技术交流社区
标题:
day05
[打印本页]
作者:
HEY、baby
时间:
2015-9-4 22:17
标题:
day05
数组:Array
为什么要有数组?
用来存储多个同类型的数据。
什么是数组?(掌握)
就是用来存储多个同类型数据的容器。数组即可以存基本类型,也可以存引用类型。
数组的索引(角标,下标)是从0开始的,
数组的最大索引: arr.length - 1;
格式:
动态初始化:给出长度,让系统来给定初始化值。
数据类型[] 数组名 = new 数据类型[数组的长度];
int[] arr = new int[5];
各数据类型的默认初始化值:(掌握)
byte,short,long,int :0
float,double : 0.0
char: '\u0000'
boolean:false
了解:
System.out.println(arr); //[I@19bb25a
I:Integer是基本类型int类型的包装类
19bb25a:该对象的哈希码的无符号的十六进制形式。
内存是如何划分:
栈:存的是局部变量。 (特点:先进后出)
局部变量:定义在方法中或者方法的声明上的变量。
public static int getSum(int a,int b){
int sum = a + b;
return sum;
}
堆:存的是所有new出来的东西(数组,对象)。
int[] arr1 = new int[3]; //0x0011
sop(arr1);
int[] arr2 = new int[3];
int[] arr3 = arr1;
静态初始化:给出初始化值,让系统来定义长度。
普通版:int[] arr = new int[]{1,2,3,4,5}; //注意,=号右边的括号中不能写长度
简化版:int[] arr = {1,2,3,4,5};
数组的常见操作:(掌握)
遍历:
1、获取到数组的长度,根据数组的长度计算出数组的最大索引。
2、通过for循环遍历。
获取最值:
最大值:
1、定义一个变量max,来记录最大值,初始值是数组中的第一个元素。
2、通过for循环,遍历数组,拿到数组中的每一个元素,然后依次和max比较,
如果遍历到的元素比max大,就把该元素的值给max。
循环结束后,max记录的就是最大值。
public static int getMax(int[] arr){
int max = arr[0];
for(int x = 1; x<arr.length; x++){
if(arr[x]>max){
max = arr[x];
}
}
return max;
}
数组反转:
1、如何定义出方法.
A:返回值:void
B:参数列表:int[]
2、定义一个第三方变量。
3、通过for循环获取到数组中的每一个元素,按照第一个和最后换,第二个和倒数第二个换的规则。。
进行交换变量。(规则:arr[i] 和 arr[arr.length-1-i])
public static void reverseArray(int[] arr){
int temp = 0;
for(int i = 1; i<arr.length/2; i++){
//就是交换:arr[i] 和 arr[arr.length-1-i]
temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
}
查表法:(大白话,就是根据索引,找数组中对应位置的元素)
做完的同学思考:
通过键盘录入一个数据,然后打印出数组中对应位置的元素,应该怎么做?
数组如下:
char[] chs = {'','一','二','三','四','五','六','七'};
基本查找:(查找某个值在数组中的索引)
1、遍历数组,拿到数组中的每一个元素。
2、判断当前遍历到的元素和要查找的元素是否一致。
如果一致,就将当前元素的索引返回。
如果不一致,就返回-1。
二维数组:
概述:每个元素都是一维数组的数组,就叫二维数组。
格式1:
int[][] arr = new int[3][2];
//二维数组中多个一维数组的长度可以不同(之后学习),且存储的是一维数组的地址值
格式2:
int[][] arr = new int[3][];
格式3:
int[][] arr = { {1,2,3},{4,5},{7,8,9},{12,13}};
//int[][] arr = { A,B,C,D};
二维数组的遍历:
1、通过for循环遍历二维数组,拿到每一个一维数组。
2、遍历一维数组的代码,咱们讲过了。
for(int i = 0; i<arr.length; i++){ //这一步是拿到二维数组中的所有一维数组(arr[i])
//arr[i]就是当前遍历到的一维数组 ABC
for(int j = 0; j<arr[i].length; j++){
Sysetm.out.print(arr[i][j] + " ");
}
System.out.println();
}
二维数组求和:
1、通过for循环遍历二维数组,拿到每一个一维数组。
2、遍历每个一维数组,拿到一维数组中的每一个元素,然后累加即可。
某商场:
第一季度:20,60,80
第二季度:10,1,20
第三季度:5,50,150
第四季度:60,0,0
Java中的参数传递问题:
Java中只有值传递,引用传递传递的是地址值。
基本类型:形参的改变不影响实参。
引用类型:形参的改变直接影响实参。(String有点特殊)
需求:
1、定义一个长度为5的数组,然后分别给各个元素赋值为:1,2,3,4,5,然后打印各个元素的值
int[] arr = new int[5];
arr[0] = 1;
2、第一个数组,元素为(6,7,8,9,10),然后给第三个元素赋值为:521,打印各个元素的值。
int[] arr = {1,2,3,4,5};
打印第一个元素:sop(arr[0]);
打印最后一个元素:sop(arr[4]);
sop(arr[14]);
3、int[] arr = {1,2,3,4,5}; //自己写一个print(),来遍历数组
中午作业:(全部通过方法来实现)
1、已知数组,通过遍历打印出数组中的每一个元素。
2、已知数组,写一个方法,求出数组中的最大值。
3、已知数组,求任意一个数字,在数组中出现的位置。(索引)
int[] arr = {1,2,3,4,5}; 求3的索引。
自己画一个下一个数组的内存图。int[] arr = {1,2,3,4,5};
int[] arr = {1,2,3,4,5,6};
{6,5,4,3,2,1};
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2