数组,方法

本文最后更新于:1 年前

二十、数组

我们可以使用数组来保存同一个数据类型的多个数据

1. 数组的特点

​ ①数组的长度一旦确定就不能改变

​ ②一个数组中元素的数据类型都是一样的

2. 数组的初始化

2.1 动态初始化

2.1.1 格式

​ 数据类型[] 数组名 = new 数据类型[长度];

例如:

1
int[] arr = new int[10];//动态初始化了一个长度为10的数组,数组元素为int类型

2.2 静态初始化

2.2.1 格式

​ 标准格式:

​ 数据类型[] 数组名 = new 数据类型[] {元素值1,元素值2,元素值3,…};

例如:

1
int[] arr = new int[]{1,2,3,4,5};

​ 省略格式(推荐使用):

​ 数据类型[] 数组名 = {元素值1,元素值2,元素值3,…};

例如:

1
int[] arr = {1,2,3,4,5};

2.3 总结

​ 静态初始化和动态初始化都可以实现对数组的初始化,那么我们在需要创建数组的时候应该如何选择呢?

​ 如果数组元素都确定好了,并且个数有限的情况下我们可以使用静态初始化,因为更方便。如果只能确定数组的长度,数组的元素值需要后面再赋值的话可以使用动态初始化。

3. 数组元素的表示

3.1 格式

​ 数组名[索引值]

例如:

1
2
3
4
5
int[] arr = {1,2,3,4};
//输出数组arr的第一个元素
System.out.println(arr[0]);
//把数组arr的第3个元素值修改为5
arr[2] = 5;

3.2 注意

​ 索引值就是一个int数字,代表数组当中元素的编号。

​ 索引值从0开始,一直到“数组的长度-1”为止。例如长度为5的数组他的索引范围为0到4

4. 数组的内存结构

观察下面代码的输出结果

1
2
3
4
5
6
7
8
int[] arr = new int[5];
arr[0] = 1;
arr[1] = 2;
int[] arr2 = arr;
arr2[2] = 3;
arr2[3] = 4;
System.out.println(arr2[0]);
System.out.println(arr[3]);

如果想要弄明白上面代码的输出结果就需要知道一个数组在内存中是如何存储的。

实际上,数组的实体保存在堆中,数组名实际保存的是数组实体的地址值。

5. 数组长度

在java中我们可以非常方便的获取到数组的长度,格式如下:

数组名.length

例如:

1
2
3
int[] arr = {1,2,3,4};
//输出数组长度
System.out.println(arr.length);

6. 数组的遍历

我们在操作数组的时候很多时候需要对数组的每个元素挨个操作一遍,这种情况下我们就可以对数组进行遍历操作。

1
2
3
4
5
int[] arr={1,2,3,4,5,7};
//遍历输出数组元素
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}

7. 常见问题

1.观察下面程序的执行结果 ArrayIndexOutOfBoundsException 数组索引越界

1
2
3
4
5
int[] arr = new int[3];
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
System.out.println(arr[2]);

二十一、数组-练习题

1.定义一个长度为100的int数组,要求里面的元素分别为1,3,5,7,9…….最后还要把数组里面的每个元素都打印出来

2.定义一个长度为10的int数组,要求用户使用键盘录入分别给数组的每个元素赋值。最后计算出该数组所有元素的总和,最大值,最小值并打印到控制台中。

3.定义2个长度为5的字符串数组arrA和arrB,arrA包含元素{“1”,”2”,”3”,”4”,”5”},arrA中的所有元素按逆序存储在数组arrB中,

在控制台打印输出arrB数组中所有元素

4.分析以下需求,并用代码实现:

(1).定义一个int类型的数组,内容为{171,72,19,16,118,51,210,7,18}

(2).求出该数组中特定元素的和,特定元素是指个位和十位不包含7的偶数。

5.分析以下需求,并用代码实现

定义一个数组,数组的元素为:{3,4,11,55,32,10,8,5},要求使用代码对该数组进行从大到小的排序,排序后的结果为{55,32,11,10,8,5,4,3}

6.分析以下需求,并用代码实现

有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?

二十二、方法

我们在编程过程中有的时候会遇到一些固定套路的代码,我们可以把这些代码封装成方法,这样我们后面去使用的时候就会更加的方便。并且代码也会更简洁,代码复用性更高。

1. 方法的定义格式

1
2
3
4
修饰符 返回值类型 方法名(参数类型1 参数名1,参数类型2 参数名2,....){
方法体;
return 返回值;
}

​ 修饰符: 目前阶段使用public static 后期学完权限修饰符和static等修饰符后可以灵活使用

​ 参数: 执行方法需要的数据

​ 返回值: 方法执行完后得到的结果

​ 方法体:方法中的代码

​ 返回值类型:返回值执行完后结果的数据类型,如果没有结果就写成void

例如:

1
2
3
4
5
6
public static void printInt(int num){
System.out.println(num);
}
public static int getSum(int a,int b){
return a+b;
}

2. 方法的调用格式

1
方法名(参数1,参数2...);

2.1 注意

​ 传参数的时候方法定义里有几个参数就传几个参数.方法定义的时候参数是什么类型就传什么类型.
​ 如果方法有返回值,一般是用变量来接收返回值,返回值是什么类型,就用什么类型的变量来接收。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Demo{
public static void printInt(int num){
System.out.println(num);
}
public static int getSum(int a,int b){
return a+b;
}
public static void main(String[] args){
printInt(10);
printInt(20);
int sum = getSum(1,2);
}
}

3. return的作用

​ 1.返回方法的返回值

​ 2. 结束方法(reutrn执行后整个方法执行结束)

4. 方法重载

定义:在同一个类中,方法名相同,参数列表不同的方法才叫方法重载(与返回值无关)

参数列表不同:1. 参数类型不同 2.参数个数不同 3.参数顺序不同

如何判断参数列表是否相同?把参数类型全部拼接成一个字符串,如果字符串的内容不同就算参数列表不同。

1
2
3
4
5
6
7
8
9
10
11
public class Demo{
public int test(int a,int b){} // intint
public void test(int a,int b){}//错


public void test(int a,int b,int c){}
public void test(int x,int y){}//错
public void test(int a,double b){}
public void test(double a,int b){}
public void test(double a,double b){}
}

5. 小思考

1.一个方法能不能有两个返回值?(PS:学会用代码去验证你的想法)

答案:不能直接返回,可以把结果放入数组中返回

2.没有返回值的方法中能不能写return?

答案: 可以,可以用来结束方法。但是return的后面不能跟数据;

3.看看下面代码的输出结果是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a="+a);
System.out.println("b="+b);
change(a,b);
System.out.println("方法调用后a="+a);
System.out.println("方法调用后b="+b);
}
public static void change(int a,int b){
int temp = a;//int temp = 10;
a = b;//a = 20;
b = temp;// b = 10;
}

4.看看下面代码的输出结果是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
int[] arr = {1,2}
System.out.println("arr[0]="+arr[0]);
System.out.println("arr[1]="+arr[1]);
change(arr);
System.out.println("方法调用后arr[0]="+arr[0]);
System.out.println("方法调用后arr[1]="+arr[1]);
}
public static void change(int[] arr){
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}

问题:java中方法调用的时候,形参的改变会不会影响实参?

答:如果方法的参数是基本数据类型,形参的改变不会影响实参。如果方法的参数是引用数据类型,形参的改变会影响实参。

6. 作业

看看下面代码的输出结果是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
int[] arr = {1,2};
System.out.println("arr[0]="+arr[0]);
System.out.println("arr[1]="+arr[1]);
change(arr);
System.out.println("方法调用后arr[0]="+arr[0]);
System.out.println("方法调用后arr[1]="+arr[1]);
}
public static void change(int[] arr){
arr = new int[2];
arr[0] = 2;
arr[1] = 1;
}

二十三、方法-练习题

1.定义一个方法,该方法能够求两个整数中的最大值。定义完后尝试调用它。

1.1.定义一个方法,该方法能够打印两个整数的最大值。定义完后尝试调用它

2.定义一个方法,该方法能够求三个整数中的最大值。定义完后尝试调用它。

3.定义一个方法,该方法可以把一个数组打印出来,打印格式如下:{1,2,3,4,5}

4.定义一个方法,该方法可以求一个数组中的最大值

5.定义一个方法,该方法可以把一个数组进行排序(从小到大)

6.定义一个方法,该方法可以获取一个任意长度的随机字符串,字符串中的字符可能是 英文大小写和数字


数组,方法
http://example.com/2020/02/01/数组-方法/
作者
Crush
发布于
2020年2月1日
更新于
2023年7月9日
许可协议