Java数组和方法
1.1 数组
1.1.1一维数组
1.声明数组
- 数组类型[] 数组名; (推荐方式)
- 数组类型 数组名[];
如: int[] arr; 或者 int arr[]; 定义了一个int型的数组,数组名为arr。
2.创建数组空间
- 若arr数组已声明: arr= new int[10];
- 若arr数组未声明:int[] arr = new int [10];
3.创建数组并初始化
- 静态初始化
-静态初始化的简化版:double[] list = {1, 29, 34, 35};
-静态初始化:double[] list = new double[]{1, 29, 34, 35}; - 动态初始化
动态初始化一个长度为3的数组:double[] list; = new double[3];
例:求10个学生的平均成绩:
public class Test {
public static void main(String[] args) {
//声明一个int类型的数组score,数组长度为10
int [] score = new int[10];
//随机生成10个学生的成绩
for (int i = 0;i<score.length;i++){
score[i]=(int)(Math.random()*101);
//输出10个学生的成绩
System.out.print(score[i]+"\t");
}
System.out.println();
//计算平均成绩
double sum = 0;
for (int i:score){
sum += i;
}
//输出平均成绩
System.out.println("平均成绩为"+sum/score.length);
}
}
1.1.2二维数组
1.声明数组
- 数组类型[][] 数组名;(推荐方式)
- 数组类型 数组名[][];
- 数组类型[] 数组名[];
2.初始化
- 静态初始化:
-静态初始化简化版:数据类型[][] 数组名 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}…};
-静态初始化:数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}…}; - 动态初始化:数据类型[][] 数组名 new 数据类型[m][n]
m:二维数组中一维数组的个数,即行数。
n:一维数组中的元素个数,即列数。
1.2 方法
1.2.1方法声明
修饰符1 修饰符2 ...返回值类型 方法名(形参列表)[throws 异常列表]{
方法体语句;
}
修饰符:
- 访问修饰符:public 、protected、default、private
- 抽象方法修饰符:abstract
- 静态方法修饰符:static
- 最终方法修饰符:final
- 同步方法修饰符:synchronized
- 本地方法修饰符:native
例如:
public static int sun(int a, int b){
int c = a+b;
return c;
}
1.2.2.void 修饰的方法
- 返回值类型:void
- 参数列表:没有参数
- 方法调用:void修饰的方法在调用的时候只能单独调用,不能赋给一个变量,也不能printf输出。
1.2.3.方法重载
在一个类中,出现了方法名相同的情况,该情况便是方法的重载。
方法重载的特点:
-
方法名相同
-
参数列表不同
其中参数列表不同:参数的个数不同 ∪ 参数的数据类型不同
【注意】 -
方法的参数是基本数据类型(整型、浮点型、字符型、布尔型):形参的改变并不影响实参。
-
方法的参数是引用类型:形参的改变影响实参。
对于基本数据类型的参数,其对应的内存单元存放的是变量的值,因此它是将实参的值传递给实参。这种情形下,对形参和实参的访问操纵的是不同的内存单元。因此,在方法内对形参数据的任何修改不会影响实参。
对于引用类型(如对象、数组等)的参数变量,实参和形参单元中存放的是引用地址,参数传递是将实参存放的引用地址传递给形参。这样,实参和形参引用的是同一对象或同一数组。因此,对形参所引用对象成员或数组元素的更改将直接影响实参数组或对象。
1.2.4.递归
方法的递归即自己调用自己,注意,在方法内递归调用自己通常是有条件的,在某个条件下不再递归。
例:求一个正整数n的阶乘:
import java.util.Scanner;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
//输入一个需要求其递归的整数
System.out.println("请输入一个正整数:");
String n = sc.nextLine();
//用正则表达式来判断输入的数是否为正整数
String pattern = "^[0-9]*[1-9][0-9]*$";
if (Pattern.matches(pattern, n)) {
int num = Integer.parseInt(n);
//调用结成方法
System.out.println(n+"的阶乘为:"+fac(num));
//退出while循环
break;
}
}
sc.close();
}
public static double fac(int n){
if (n==1){
return 1;
}else {
return n*fac(n-1);
}
}
}