08_方法的封装、数组
1、方法的封装
1.1 方法封装三部曲
一框 二看 三封装
一框
找核心代码
二看
上看参数
下看找返回
三封装
完成方法封装操作,完成方法声明,完成文档注释
1.2 案例
1.2.1 未封装代码功能实现
/*例如:
输入 5 8;
计算 5 + 6 + 7 + 8;
输出 26.
*/
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个数:");
int num2 = sc.nextInt();
int sum = 0;
//对键入的两个整数判断大小
if (num1 > num2) {
/*
定义一个中间变量
int temp = num1;
num1 = num2;
num2 = temp;
*/
//省空间
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
}
for (int i = num1; i <= num2; i++) {
sum += i;
}
System.out.println(sum);
}
}
1.2.2 方法封装分析
1.2.3 方法封装之后代码实现
/*例如:
输入 5 8;
计算 5 + 6 + 7 + 8;
输出 26.
*/
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个数:");
int num2 = sc.nextInt();
System.out.printf("%d~%d之间的所有数的和:%d",num1,num2,sumBetweenTwoNumbers(num1,num2));
}
public static int sumBetweenTwoNumbers(int num1,int num2) {
int sum = 0;
//对键入的两个整数判断大小
if (num1 > num2) {
/*
定义一个中间变量
int temp = num1;
num1 = num2;
num2 = temp;
*/
//省空间
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
}
for (int i = num1; i <= num2; i++) {
sum += i;
}
return sum;
}
}
运行结果如下图
2、数组
2.1 Java中数组的定义格式
格式1:
数据类型[] 数组名 = new 数据类型[容量];
赋值号左侧:
数据类型:
定义当前数组存储的数据类型,而且严格遵守数据类型一致化要求,有且只能存储目前数据类型。
[]:
1、表明当前定义的类型为数组类型
数组名:
1、数组名是一个【引用数据类型】的变量。
【名词解释 引用数据类型】
引用数据类型,具备跳转性和指向性(相当于C语言中的指针),指向一个对象的内存地址。
2、存储指向当前数组第一个元素的内存地址。
赋值号右侧:
new:
Java关键字
1、在内存的【堆区】,申请当前数组所需的内存空间。
内存空间的计算方式:数据类型的字节长度 * 容量(数组长度)
【名词解释 内存堆区】
内存的仓库,程序可以在内存中申请一块内存空间用于存储开发所需的数据内容。
2、清除申请到的内存空间中之前残余的数据。
数据类型:
要求和赋值号左侧的数据类型必须保持一致,严格遵从数据类型一致化要求,明确当前数组有且只能存储的数据类型。
[容量]:
1、定义当前数组的长度,即当前数组可以存储的对应数据类型的数据个数。
2、数组的容量一旦确定,无法修改。
格式2:
数据类型[] 数组名 = {数据1,数据2,……}
赋值号左侧:
数据类型:
定义当前数组存储的数据类型,而且严格遵守数据类型一致化要求,有且只能存储目前数据类型。
[]:
1、表明当前定义的类型为数组类型
数组名:
1、数组名是一个【引用数据类型】的变量。
2、存储指向当前数组第一个元素的内存地址。
赋值号右侧:
{}:
1、大括号里面的数据内容就是当前数组的数据内容,不同的数据之间使用逗号【,】隔开。
2、数组的容量由目前的数据个数决定。
2.2 Java数组案例
/*
格式:
数据类型[] 数组名 = new 数据类型[容量];
定义数组存储的数据类型为 int 类型 数组容量为 10
数组名 arr array的简写
*/
int[] arr = new int[10];
操作数组必须使用下标,需要明确有效下标的范围
【有效下标范围】
1、数组的下标从 0 开始
2、到 数组的容量 - 1 结束
使用格式:数组名[有效下标]
//数组案例
public class Demo2 {
public static void main(String[] args) {
/*
格式:
数据类型[] 数组名 = new 数据类型[容量];
定义数组存储的数据类型为 int 类型 数组容量为 10
数组名 arr array的简写
*/
int[] arr = new int[10];
/*
操作使用数组中的元素 需要下标支持
格式:
数组名[下标]
目前数组的有效下标范围是 0 ~ 9
*/
//给予 int 类型数组 arr 下标为 0 的元素赋值 10
arr[0] = 10;
//给予 int 类型数组 arr 下标为 9 的元素赋值 20
arr[9] = 20;
//取值 int 类型数组 arr 下标为 0 的元素存储的数据内容
System.out.println(arr[0]);
//取值 int 类型数组 arr 下标为 9 的元素存储的数据内容
System.out.println(arr[9]);
}
}
运行结果如下图
2.3 数组和循环之间的关系
数组的下标范围是一个等差数列,同时数组在内存中的存储地址具有连续性。
//数组和循环配合使用
public class Demo3 {
public static void main(String[] args) {
/*
定义一个 int 类型的数组 数组容量为 10 数组名为 arr
格式1:
数据类型[] 数组名 = new 数据类型[容量];
*/
int[] arr = new int[10];
/*
补充:
数组名.length 获取当前数组的容量
length 是数组的属性
数组最大下标为 数组名.length - 1
*/
/*
使用循环对数组进行赋值操作
*/
for (int i = 0; i < arr.length; i++) {
arr[i] = i * 5;
}
/*
使用循环对数组进行取值操作
*/
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
运行结果如下图
2.4 数组内存分析图
3、数组操作和算法
3.1 指定数组所有数据求和
//指定数组的所有数据求和
public class Demo4 {
public static void main(String[] args) {
/*
数组定义
格式2:
数据类型[] 数组名 = {数据1,数据2……}
{} 里面的数据内容就是当前数组的数据内容 不同的数据之间使用 , 隔开
数组的容量由目前的数据个数决定
*/
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sum = 0;
//利用循环遍历整个数组 从下标为 0 开始到最后一个有效下标结束
//进行累加操作
for (int i= 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println("数组所有元素之和为:" + sum);
}
}
运行结果如下图
3.2 找出指定数组中所有元素中的最大值下标位置
//找出指定数组中所有元素的最大值的下标
public class Demo5 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//定义一个变量存储最大值的下标
int index = 0;
//遍历整个数组
for (int i =1; i < arr.length; i++) {
//使用 if 判断,当前 i 对应的元素大于 index 下标对应的元素
if (arr[i] > arr[index]) {
index = i;
}
}
//展示数组中最大值下标位置
System.out.println("最大值的下标为:" + index);
}
}
运行结果如下图
3.3 数组元素逆序输出
//数组元素内容逆序输出
public class Demo6 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//原数组元素展示
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
//循环遍历进行元素交换 交换次数 数组长度 / 2
for (int i = 0; i < arr.length / 2; i++) {
arr[i] = arr[i] + arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = arr[i] - arr[arr.length - 1 - i];
arr[i] = arr[i] - arr[arr.length - 1 - i];
}
//循环遍历打印逆序之后的数组元素
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
运行结果如下图