1、方法
假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹。发射炮弹的动作需要编写100行的代码,在每次实现发射炮弹的地方都需要重复地编写这100行代码,这样程序会变得很臃肿,可读性也非常差。
为了解决代码重复编写的问题,可以将发射炮弹的代码提取出来放在一个{}中,并为这段代码起个名字,这样在每次发射炮弹的地方通过这个名字来调用发射炮弹的代码就可以了。
上述过程中,所提取出来的代码可以被看作是程序中定义的一个方法,程序在需要发射炮弹时调用该方法即可。
在Java中,声明一个方法的具体语法格式如下所示:
修饰符 返回值类型 方法名([参数类型 参数名1,参数类型 参数名2,....]){
执行语句1
......
return 返回值;
}
修饰符:是对访问权限的限定,例如,public、static都是修饰符
返回值类型:用于限定方法返回值的数据类型
参数类型:用于限定调用方法时传入参数的数据类型
参数名:是一个变量,用于接收调用方法时传入的数据
return关键字:用于结束方法以及返回方法指定类型的值
返回值:被return语句返回的值,该值会返回调用者
**Java允许在一个程序中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。
**
2、数组
数组是指一组数据的集合,数组中的每个元素被称为元素,在数组中可以存放任意类型的元素,但同一个数组中存放的元素类型必须一致。
在Java中,可以使用下列格式定义一个数组,具体示例如下:
int[] x = new int[100];
上述语句就相当于在内存中定义了100个int类型的变量,第一个变量的名称为x[0],第二个变量的名称为x[1],以此类推,第100个变量的名称为x[99],这些变量的初始值都是0。
为了更好地理解数组的定义方式,可以把上述代码定义为两行来写,具体如下:
int [] x;
x = new int[100];
接下来,通过两张内存图来说明数组在创建过程中的内存分配情况,具体如下所示:
在Java中,为了方便我们获得数组的长度,提供了一个length属性,在程序中可以通过“数组名.length”的方式来获得数组的长度,即元素个数。当数组被成功创建后,数组中的元素会被自动赋予一个默认值,根据元素类型的不同,默认初始化的值也是不一样的。
在初始化数组时还有一种方式叫做静态初始化,就是在定义数组的同时就为数组的每个元素1赋值,数组的静态初始化有两种方式:
1.类型 [] 数组名 = new 类型[] {元素,元素,.........};
2.类型 [] 数组名 ={元素,元素,.........};
数组的常见操作
1、数组遍历
在操作数组时,经常需要依次访问数组中的每个元素,这种操作叫做数组的遍历。
public class Example29{
public static void main(String[] args) {
int[] arr = {1,2,3,4,5}; //定义数组
//使用for循环遍历数组元素
for(int i = 0; i<arr.length; i++){
System.out.println(arr[i]); //通过索引访问元素
}
}
}
运行结果如下
2、数组最值
在操作数组时,经常需要获取数组中元素的最值。
public class Example30 {
public static void main (String[] args){
int[] arr ={4,1,6,3,9,8}; //定义一个数组
int max = getMax(arr); //调用获取元素最大值的方法
System.out.println("max="+max);//打印最大值
}
static int getMax (int[] arr){
int max = arr[0]; //定义变量max记住最大数,首先假设第一个元素为最大值
//下面通过一个for循环遍历数组中的元素
for(int x = 1;x < arr.length; x++) {
if(arr[x] > max) { //比较arr【x】的值是否大于max
max = arr[x]; //条件成立,将arr【x】的值赋给max
}
}
}
return max; //返回最大值
}
运行结果如下
3、数组排序
在操作数组时,经常需要对数组中的元素进行排序,其中冒泡排序是比较常见的一种算法。冒泡过程中,不断比较数组中相邻的两个元素,较小者向上浮,较大者往下沉,整个过程和水中气泡上升的原理相似。
数组排序的过程如下所示:
(1)从第一个元素开始,将相邻的两个元素依次比较,直到最后两个元素完成比较,如果第一个元素比后一个大,则交换位置。整个过程完成后,数组中最后一个元素就是最大值
(2)除最后一个元素,将剩余的元素继续进行两两比较,过程与第一步类似,这样数组中第二大的元素放在了倒数第二个位置
(3)以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一个元素需要比较为止。
public class Example31 {
public static void main (String[] args) {
int[] arr = {9,8,3,5,2};
System.out.print("冒泡排序前:");
printArray(arr); //打印数组元素
bubbleSort(arr); //调用排序方法
System.out.print("冒泡排序后:");
printArray(arr); //打印数组元素
}
//定义打印数组元素的方法
public static void printArray (int[] arr) {
//遍历数组元素
for(int i = 0; i<arr.length; i++) {
System.out.print(arr[i]+" "); //打印元素和空格
}
System.out.print("\n");
}
//定义对数组排序的方法
public static void bubbleSort(int[] arr){
//定义外层循环
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]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j+1]=temp;
}
}
System.out.print("第"+(i+1)+"轮排序后:");
printArray(arr); //每轮排序结束打印数组元素
}
}
}
运行结果如下
多维数组
多维数组可以简单地理解为在数组中嵌套数组。在程序中比较常见的就是二维数组。
二维数组的定义有很多方式,具体如下:
方式一:
上面的代码定义了一个3行4列的二维数组,它的结构如下图所示。
方式二:
上述方式与第一种方式类似,只是数组中每个元素的长度不确定,采用第二种方式常见的数组结构如下图所示。
方式三:
采用上述方式定义的二维数组有三个元素,这三个元素都是数组,分别是{1,2}、{3,4,5,6}、{7,8,9}。
接下来,通过一张图来描述方式三定义的数组结构
多维数组对元素的访问也是通过角标的方式,例如,访问二维数组中第一个元素数组的第二个元素的方式如下所示:
通过一个案例来熟悉二维数组的使用,例如要统计一个公司三个销售小组中每个小组的总销售额以及整个公司的销售额,如例2-33所示。