1.方法
1.1定义有返回值的方法
语法:
public static 数据类型 方法名(参数列表){
//业务逻辑
return 定义的该种数据类型的值;
}
-
定义了方法的返回数据类型,那么该方式必须使用reurn关键字,返回一个该类型的是数据
-
在调用该方法时,可以定义一个该类型的变量接收返回值
package com.qfedu; public class Demo01 { public static void main(String[] args) { // int sum=add(1, 5); // System.out.println(sum); // // int s2=sum(100); // System.out.println(s2); int max=max(12, 23); System.out.println("最大值是:"+max); int s3=sum1(100); System.out.println("偶数和是"+s3); } //定义一个方法,参数两个整数,打印两个整数的和 public static int add(int a,int b) { int sum = a+b; return sum; } //定义一个方法,参数时n,返回1+。。。+n的和 public static int sum(int n) { int sum=0; for (int i = 1; i <=n; i++) { sum+=i; } return sum; } /* * 1.两个参数,返回最大值 * 2.参数为一个整数,获取1-n之间的偶数和 */ public static int max(int a, int b) { if (a>b) { return a; }else { return b; } } public static int sum1(int num) { int sum=0; for (int i = 1; i <=num; i++) { if (i%2==0) { sum +=i; } } return sum; } }
1.1.1 return关键字
- 如果方法定义void,表示该方法没有返回值
- 返回类型为void,也可以定义return关键字,后面不可以定义任何类型的值
- 如果一个方法执行了return关键字,那么该方法就运行结束
package com.qfedu;
public class Demo02 {
public static void main(String[] args) {
}
/*
* 如果方法定义void,表示该方法没有返回值
* 返回类型为void,也可以定义return关键字,后面不可以定义任何类型的值
* 如果一个方法执行了return关键字,那么该方法就运行结束
*/
public static void test01() {
return;
}
private static int max(int a, int b) {
if (a>b) {
return a;
}
return b;
}
}
1.2递归
- 方法之间可以相互调用
- 如果自己调用自己,则成为递归(其实就是循环)
- 如果是递归,一定有程序的出口,也就是i熬出循环(结束方法)
package com.qfedu;
public class Demo04 {
public static void main(String[] args) {
int sum = sum(10);
System.out.println(sum);
long factorial = factorial(10);
System.out.println(factorial);
long evenNumberSum = evenNumberSum(10);
System.out.println(evenNumberSum);
int oddNumberSum = oddNumberSum(5);
System.out.println(oddNumberSum);
}
//计算1+2+3+。。。。+n
public static int sum(int n) {
if (n ==1) {
return 1;
}
return sum(n-1)+n;
}
//计算1*2*3.。。。*n
public static long factorial(int n) {
if (n==1) {
return 1;
}
return factorial(n-1)*n;
}
//使用递归计算1-n之间的偶数和
/*
* evenNumberSum(10) = evenNumberSum(8)+10
* evenNumberSum(8) = evenNumberSum(6)+8
* evenNumberSum(6) = evenNumberSum(4)+6
* evenNumberSum(5) = evenNumberSum(5-3)+4
*/
public static long evenNumberSum(int n) {
if (n%2==0) {
if (n==2) {
return 2;
}
return evenNumberSum(n-2)+n;
}
n--;
return evenNumberSum(n-2)+n;
}
/*
* 递归计算1-n的奇数和
* oddNumberSum(9)=oddNumberSum(7)+9
* oddNumberSum(7)=oddNumberSum(5)+7
*
*/
public static int oddNumberSum(int n) {
if (n%2!=0) {
if (n==1) {
return 1;
}
return oddNumberSum(n-2)+n;
}
n--;
return oddNumberSum(n-2)+n;
}
}
1.2.1
斐波那契数列
package com.qfedu;
public class Demo05 {
public static void main(String[] args) {
long fibonacci = fibonacci(5);
System.out.println(fibonacci);
long sumFib = sumFib(7);
System.out.println(sumFib);
}
//斐波那契数列
public static long fibonacci(int n) {
if (n==1) {
return 0;
}
if (n==2) {
return 1;
}
return fibonacci(n-2)+fibonacci(n-1);
}
public static long sumFib(int n) {
if (n==1) {
return 0;
}else if(n==2) {
return 1;
}
return fibonacci(n)+sumFib(n-1);
}
}
2.数组
1.数组的本质
一组连续的存储空间
- 数组有长度
- 有数据类型,每份内存只能保存什么类型的数据
- 可以统一操作每份内存空间中的值
2.数组的创建
语法:
数据类型[] 变量名 = new 数据类型[长度]
package com.qfedu;
public class Demo06 {
public static void main(String[] args) {
//定义我们班所有的同学成绩
/*
* int[] 表示一种数据类型,表示的是数组
* new int[3] 表示在堆内存中分配一个内存空间,会将这个空间分成三份
* 所有的引用类型,都保存在堆内存中
*/
int[] arr =new int[3];
String[] arr2=new String[5];
boolean[] arr3=new boolean[10];
char[] arr4 =new char[5];
}
}
3.数组的操作
对数组的操作,无非就是存值和取值,以及数组的遍历
-
赋值
数组名称[下标] = 值;
-
取值
数据类型 变量名称 = 数组名称[下标];
-
遍历
char[] arr1=new char[3]; arr1[0]='你'; arr1[1]='-'; arr1[2]='好'; for (int i =0; i <arr1.length; i++) { System.out.print(arr1[i]); }
4.数组的默认值
- 基本类型
- 整数 0
- 小数 0.0
- 布尔 false
- 字符 空格
- 引用类型
- 字符串 null
- null
- null是一个值
- 但是null表示是没有值
- null值可以赋值给所有的引用类型
- null
- 字符串 null
5.数组的扩容
数组的长度一旦确定了,下标也就确定,不能再改变
package com.qfedu;
public class Demo09 {
public static void main(String[] args) {
/*
* 数组的扩容
*/
int[] arr=new int[2];
arr[0]=2;
arr[1]=4;
//此时,根据业务需求,确实需要往这个数组中添加一个新的值5
//1.创建一个目标长度数组
int[] newArr=new int[4];
//2.把原数组的值,按照坐标保存再新数组中
newArr[0] = arr[0];
newArr[1] = arr[1];
//3.把目标数组重新赋值给原数组变量
arr=newArr;
arr[2] = 5;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}