java、day9 1.方法 2.数组 增强for循环 遍历 冒泡排序接触,翻转数组等一系列问题
java中都是直传递
1.1什么是方法
-
和c语言中的函数比较相似
-
用代码片段来完成某些特定的功能
1.2方法的定义
1.2.1实参
实际参数,实际调用给函数的
1.2.2形参
形式参数,用来定义的
package method;
public class MethodDemo1 {
public static void main(String[] args) {
// 实际参数,实际调用给函数的
int sum =add(2,3);
System.out.println(sum);
}
//方法,相当于函数 可以是public int add 调用比较麻烦,和类变量相识,所以加一个static
// 形式参数,用来定义的指其中的inta。intb
public static int add(int a,int b){
return a+b;//方法终止,方法在碰到return时就会自动结束
}
}
1.2.3可变参数(较为重要)
也叫不定向参数,注意事项,只能在几个定义好的参数的后面,相当于一个数组
就是int...(三个点)
public class MethodDemo3 {
public static void main(String[] args) {
// new MethodDemo3(); alt+回车
MethodDemo3 methodDemo3 = new MethodDemo3();
methodDemo3.test(1,43,435,545,5);
}
// 必须要放在多个定义参数的后面,比如test(int... i,int1)就不行
// 但是test(int1,int...i)就可以
public void test(int... i){
System.out.println(i[0]);
System.out.println(i[1]);
System.out.println(i[2]);
System.out.println(i[3]);
System.out.println(i[4]);
}
}
结果:
1
43
435
545
5
1.3方法调用
1.3.1调用方法
对象名.方法名
1.4方法的重载
有的时候需要的函数相同,但是返回值不同,有的是int 有的是double,所以要方法重载
1.4.1方法重载的规则
1.5命令行传参(不经常使用)
命令行参数就是在执行程序时可以紧紧跟在名字后面
package method;
public class MethodDemo2 {
public static void main(String[] args) {
// args.length 数组长度
for (int i = 0; i < args.length; i++) {
System.out.println("args["+i+"]:"+args[i]);
}
}
}
1.5.1命令行运行
-
首先打开java文件所在位置,并且用cmd打开
-
编译javac 文件.java
-
返回到包名的最前面,比如包是com.baidu.www那就返回到scr
-
接下来运行改文件 要加上包名java com.baidu.www.文件 da sha bi (接下来的数组如上图所示)
1.6递归
1.6.1什么是递归
递归就是自己调用自己(java使用不当会报错溢出),正确使用会大大减少代码量
递归结构包含两个部分一个是
递归头:必须有尽头,不然将陷入死循环
递归体:什么时候需要调用自身方法
边界条件:比如下面这个程序就会执行到jie(1然后返回1)
因为java使用的是栈机制,就是一个罐子里(main函数)放很多方法,用一个去一个
所以使用递归就会大量调用方法,一般来说不太推荐
1.6.2递归使用阶乘
public class MethodDemo4 {
// 5的阶乘就是5*4*3*2*1
public static void main(String[] args) {
System.out.println(jie(5));
}
public static int jie(int i){
if (i==1){
return 1;
}else {
return i*jie(i-1);//递归头,一直递归到1
}
}
}
2.数组
2.1什么是数组
-
数组是相同数据类型的有序集合
-
是通过下标来指定
2.1.1数组的四个特点
-
其长度是确定的,不可以改变
-
元素必须是想同类型
-
数组中的元素可以是任何数据类型,包括基本类型和引用类型
-
数组也可以看成对象,数组中的每个元素相当于该对象的成员变量
-
数组本身即是对象java中对象就是在堆中
-
下标边界【0,length-1】,越界就会报错
2.2数组创建声明(有两种声明方式)
//变量的类型 变量的名字 =变量的值
int a =0;
//数组的类型 数组的名字 =数组的值
int[] nums;//1、一个数组
nums = new int[10];//2、创建一个分配10个空间数组
//没有赋值就默认是0
//也可以
int nums=new int[10];
2.2.1在中间加中括号(在类型名)
dataType[] arrayRefVar;
2.2.2在最后加中括号(在变量名)
dataType arrayRefVar[];
2.3创建一个数组,求数字内所有数字的和
public class ArrayDemo1 {
public static void main(String[] args) {
int[] nums = new int[10];
nums[0]=5;
nums[1]=5;
nums[2]=5;
nums[3]=5;
nums[4]=5;
nums[5]=4;
nums[6]=3;
nums[7]=2;
nums[8]=1;
nums[9]=6;
int sum1 = 0 ;
int sum2 = 0 ;
//nums.length数组的长度
for (int i = 0; i < nums.length; i++) {
sum1+=nums[i];
}//弹幕里面说可以nums.for遍历数组,暂时还未解除
System.out.println(sum1);
}
}
2.4数组内存分析
-
首先是声明数组 在栈中开辟了一个位置
-
然后在队中new出一个空间存放10个块
-
最后给这10个块赋值
-
这里开辟了十个空间,如果想找a[11],就会出现错误.ArrayIndexOutOfBoundsException(大致意思就是超出了边界)
2.5数组创建的三种初始化状态
2.5.1静态初始化
int[] a={1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)};
2.5.2动态初始化
int[] a = new int[2];
a[0]=1;
a[1]=5;
2.5.1默认初始化
-
new以后创建空间后每个元素都是默认值
2.6数组使用
2.6.1简单for循环打印全部的数组元素
2.6.2计算数组内所有元素的和
2.6.3找到数组内最大的数字
2.6.4增强for循环遍历数组,打印出所有数字
2.6.5数组可以作为参数,也可以作为返回值
2.6.6反转数组
public class ArrayDemo2 {
public static void main(String[] args) {
int[] nums1 = new int[3];
nums1[0] = 3;
nums1[1] = 6;
nums1[2] = 7;
int[] nums2 = {5,1,5,9,7};
int sum = 0;
int max = 0;
// 1.简单for循环,打印全部的数组元素
for (int i = 0; i < nums2.length; i++) {
System.out.println(nums2[i]);
}
// 2.计算所有元素的和
for (int i = 0; i < nums2.length; i++) {
sum+=nums2[i];
}
// 3.找到max里面最大的值
for (int i = 0; i < nums2.length; i++) {
if(nums2[i]>max){
max=nums2[i];
}
}
// 4. 增强for循环nums2.for但是没有下标,不能操作元素,适合打印元素
for (int i : nums2) {
System.out.println(i);
}
System.out.println("max:"+max);
System.out.println("sums"+sum);
printArray(nums2);
// 反转数组打印
printArray(reverse(nums2));
// for (int i : nums2) {
// System.out.println(nums2[i]);
// }
// 5. 作为方法的参数,利用方法打印数组内的内容
}
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]+"");
}
}
// 6.利用数组作为返回值和参数使数组内的所有数倒置
public static int[] reverse(int[] arrays) {
int[] result = new int[arrays.length];
int j = arrays.length - 1;
for (int i = 0; i < arrays.length; i++) {
result[j] = arrays[i];
j
