目录
一、方法定义使用
1、Java方法定义
1.1 什么叫方法?
方法可以认为是一个数学中的公式模板,已经固定好了。你需要它的时候可以直接调用即可,无需做重复工作。
1.2 方法的定义
方法的格式为:
public static 方法返回类型 方法名(参数类型 变量名){
方法体;
[return];
}
注意点:
public class Class{
public static void main(String[] args) {
int a = 10;
int b = 20;
int sum = add(a,b);//调用add方法计算a+b的值
System.out.println(sum);
}
public static int add(int x,int y) {//进入add方法计算a+b的值
return x+y;//返回两数和
}
}
例二 计算n阶之和:1!+2!+3!+......+n!
import java.util.Scanner;
public class Class {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNextInt()) {//键盘连续输入
int a = scan.nextInt();
int sum = 0;
for (int i = 1; i <= a; i++) {
sum += func(i);//调用方法计算阶乘
}
System.out.println(sum);
}
}
public static int func(int n) {//进入方法
int ret =1;
for (int i = 1; i <=n ; i++) {
ret *=i;
}
return ret;//返回计算阶乘的数值
}
}
例三 交换两个数值并输出
public class TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);//调用方法
System.out.println("a = " + a + " b = " + b);
}
public static void swap(int x, int y) {//进入方法
int tmp = x;
x = y;
y = tmp;
System.out.println("x = " + x + " y = " + y);//交换两数并输出
//此处交换两数后,因为其他地方无需使用到该交换后的值,所以无返回值,使用void
}
}
2、方法重载
方法重载是指在Java中一个类下面可以定义多个名字相同的方法,方法名字相同但参数类型不同,这样可以被称为方法重载。
注意点:方法重载只与方法名和参数类型有关,与方法返回类型无关。
参数个数不同,如func(int x)与method(int x,int y)不同
参数类型不同,如func(int x)与method(double x)不同
参数顺序不同,如func(int x,double y)与method(double x,int y)不同
重载只与方法名与参数类型相关与返回值无关
如void func(int x)与int func(int y)不是方法重载,不能同时存在
重载与具体的变量标识符无关
如func(int x)与func(int y)不是方法重载,不能同时存在
3、方法递归
递归定义:一个方法在执行过程中调用自身, 就称为 "递归"。递归就是方法对自己的调用。
例:计算1!+2!+3!+......+n!
import java.util.Scanner;
public class Class {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNextInt()) {
int a = scan.nextInt();
int sum = 0;
for (int i = 1; i <= a; i++) {
sum += func(i);
}
System.out.println(sum);
}
}
public static int func(int n) {
if(n == 1) {
return 1;
} else {
return n*func(n-1);//方法递归调用
}
}
}
public static int fib(int n) {
if (n == 1 || n == 2) {
return 1;
}
return fib(n - 1) + fib(n - 2);
}
二、数组定义与使用
1、数组的定义
数组:可以看成是相同类型元素的一个集合。
2、数组命名格式
数据类型[ ] 数组名 =new 数据类型[a];//a为数组长度
数据类型[ ] 数组名 ={1,2,2,3};
数据类型[ ] 数组名 =new 数据类型[ ] {1,2,3,4,5};
注意点:数据类型可以为int、double、String
3、数组元素访问
4、遍历数组
依次访问数组并将数组元素打印出来,代码如下
代码一:使用循环语句遍历数组
public class Class {
public static void main(String[] args) {
int[] array ={1,2,3,4,5,6};
for(int i = 0; i < array.length;i++) {//array.length指数组长度
System.out.println(array[i]);
}
}
}
代码二:使用 for-each 遍历数组
public class Class {
public static void main(String[] args) {
int[] array ={1,2,3,4,5,6};
for(int x:array) {
System.out.println(x);
}
}
}
5、数组的引用介绍
array是数组的引用变量,在内存中保存在Java虚拟机栈上,存储的是数组在堆空间中的首地址,
int[] array={1,2,3,4,5};
public static void func() {
int[] array1 = new int[]{0,0,0};
array1[0] = 10;
array1[1] = 20;
array1[2] = 30;
int[] array2 = new int[]{1,2,3,4,5};
array2[0] = 100;
array2[1] = 200;
array1 = array2;
array1[2] = 300;
array1[3] = 400;
array2[4] = 500;
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i]);
}
}
分析步骤1:
在虚拟机栈中创建2个数组array1和array2,
array1[0] = 10; array2[0] = 100;
array1[1] = 20; array2[1] = 200;
array1[2] = 30;
通过下标方式修改将堆中数组元素修改
分析步骤2:
此时array1=array2,array1指向array2所指向的对象,array1和array2两个栈帧指向同一个对象。
array1[2] = 300;
array1[3] = 400;
array2[4] = 500;
再通过下标修改方式将对象数组元素进行修改,array1和array2虚拟机栈中都指向同一个数组{100,200,300,400,500}
6、数组转字符串
代码示例
import java.util.Arrays
public class Class {
public static void main(String[] args) {
int[] array ={1,2,3,4,5,6};
System.out.println(Arrays.toString(array));
}
}
使用Arrays.toString可以将数组转换为字符串进行输出