Java 函数与数组 Java第四天

函数与数组

1.函数(方法)

  定义:方法是一段能完成独立功能的代码块,我们只需要写一次方法,此方法就可以多次被调用,依次来提高代码的复用性。
  静态方法区:在内存中专门存储静态方法的区域。
  函数(方法)的语法:

//权限修饰符     或者为void   或为函数名      这两个统称为参数列表,也可有也可无
public static   返回值类型     方法名       (数据类型 参数名){
	方法体;
//当返回值类型为void时,没有return 结果名;此段代码
	return 结果名;
}

	/*
	*主方法(函数)
	*/
public static void main(String[] args) {
	方法体;
}

	/*
	*一般方法 无返回值(函数)
	*/
public static void 方法名() {
	方法体;
}

	/*
	*一般方法 有返回值(函数)
	*/
public static 返回值类型 方法名() {
	数据类型 结果名 = 初始值;
	方法体;
	return 结果名;
}

  主方法调用一般方法的语法:

//当存在返回值类型时,变量用来存储return返回的结果名的值
//参数名也可有也可无
返回值类型 变量名 = 方法名(参数名1,参数名2...);

//当返回值为void时
//参数名也可有也可无
方法名(参数名1,参数名2...);

  返回值类型:返回值类型是函数执行后要给调用者的数据类型,如果指定了数据类型就必须要有return语句,如果返回值类型为void则不用有return语句。
  参数:调用者传递过来的数据的接受方式,参数可以有多个,也可没有。
  实参:主函数调用时所传递的变量的值。
  形参:方法中的参数。

  注意:①方法名:在给方法命名时要见名知意,并且按照驼峰模式`xxxYyyZzz`。
     ②调用方法时是通过值传递的方式将实参的值传递给方法的形参
     ③Java语言中只有值传递。
     ④自定义方法的数据类型要与传递的值的数据类型一致
     ⑤当方法有返回值时,必须至少要有一个return语句被执行。
     ⑥return后的代码不能被访问!

2.方法的重载

  定义:(overload)在一个类中有两个以上同名的方法,但是参数不同(参数的个数或类型不同),跟返回值无关。
  目的:提高代码的可读性,节省命名的词。

public class OverloadExample {
	
    public static void main(String[] args){
    //实例化对象
    	OverloadExample overloadExample = new OverloadExample();
    	
    	//使用对象调用方法,不打印返回值
    	overloadExample.example();
    	
    	//使用对象调用方法,无返回值
        overloadExample.example(1);
        
        //使用对象调用方法,不打印返回值
        overloadExample.example(1,"example3");
        System.out.println();
        
        //使用对象调用方法,打印返回值
        System.out.println(overloadExample.example(1,"example3"));
        System.out.println();
        
        //使用对象调用方法,不打印返回值
        overloadExample.example("example4",1);
        System.out.println();
        
        //使用对象调用方法,打印返回值
        System.out.println(overloadExample.example("example4",1));
    }
    
	 public int example(){
	        System.out.println("Example1");
	        return 1;
	    }
	 
	    public void example(int a){
	        System.out.println("Example2");
	    }   
	 
	    //以下两个参数类型顺序不同
	    public String example(int a,String s){
	        System.out.println("Example3");
	        return "returnexample3";
	    }   
	 
	    public String example(String s,int a){
	        System.out.println("Example4");
	        return "returnexample4";
	    }   
}

结果:
Example1
Example2
Example3

Example3
returnexample3

Example4

Example4
returnexample4

3.数组

  定义:一组数据,一个数据的集合,其数值在堆中存储。
  语法:

//					这里的整数是数组的长度
数据类型 [] 数组名 = new 数据类型[整数];
int [] arr = new int[3];

数据类型 [] 数组名 = new {数值1,数值2,数值3,...};
int [] arr = new {1,2,3,...};

数据类型 [] 数组名 = new 数据类型[]{数值1,数值2,数值3,...};
int [] arr = new int[]{1,2,3,...};

//获取数组长度的语法
数组名.length;
int a = 0;
a = arr.length;

/*当数组在方法的参数列表中时的语法
 *作用:可将在此方法外定义的数组接收并传入到此方法中并使用
 *注意:方法参数列表中的数据类型需要与数组的类型相同
 *参数名可不与数组名相同*/
方法名(数据类型 [] 参数名){  }
public void example(int[] array){
	方法体;
}

  索引:(Index)索引指的是当前数组元素在数组中的位置,从0数起。
  注意:①当一个数组长度为4时,最后一位数据的索引为3。
     ②注意数组越界报错(ArrayIndexOutofBoundsException),在数组中索引<数组长度,否则就会报错。

在内存中的表现

 在java中,内存被分为栈、堆,他们都是一块内存空间。

名称特性适合场景举例特点
容量小,存取速度快适合存储生命周期短的数据变量(局部变量)先进后出,后进先出
容量大,存取速度慢适合存储生命周期长的数据对象(实例)-

  数组属于引用类型,在堆中存储。在堆中任何一个存储空间都有相对应的地址,一个数组有且仅有一个地址,地址一般为十六进制并带有符号。

定义数组时的内存过程

  每当用户在定义一个数组时
 ①java会先在堆中开辟一块新的内存空间用来存储数组的数据,并给这个存储着数组数据的内存空间一个内存地址
 ②其次会在栈中也开辟一块新的内存空间用来存储上面的内存地址,并将这个存储着数组地址的内存空间命名为用户定义的数组名

使用数组时的内存过程

  在使用数组时,
①java首先去栈中找到相对应数组名的内存空间
②再从此内存空间中获取到相对应的值(内存地址)
③然后获取堆中数组的数据,再将其调用。

遍历数组

  定义:将指定结构的数据全部访问一遍。

public static void main(String[] args) {
//定义一个数组
		int [] a = {15,2,3,45,5,6,7,78,7,0};
		
		//调用遍历数组的方法,并将要遍历的数据传过去
		printArray(a);
		
	//定义一个遍历数组的方法
	public static void printArray(int[] aa) {
		for(int i = 0; i<aa.length;i++) {
		//将遍历好的数组打印出来
			System.out.print(aa[i]+"\t");
		}
	}
}

求数组的极值

步骤:
①在for循环结构外定义结果变量
②定义一个for循环结构(for循环内的计数器应从1开始,若从0开始等于第一个数值多一次与自身比较,无意义)
③在for循环结构内使用if语句将结果变量与数组的值比较
④在主方法内定义一个变量用来接收求出的极值
⑤调用相关方法
⑥将求出的极值打印出来
注意:更改if语句内的大小比较符即可变换求极大值或极小值

public static void main(String[] args) {
		int [] a = {15,2,3,45,5,6,7,78,7,0};
		//调用求极值的方法,并将要求极值的数组的数据传过去
		int max = maxValue(a);
		int min = minValue(a);
		
		System.out.println("最大值"+max);
		System.out.println("最小值"+min);
		
	//最大值
	public static int maxValue(int [] aa) {
	//定义结果变量
		int result = aa[0];
		for(int i = 1; i<aa.length; i++ ) {
			if(result < aa[i]) {
				result = aa[i];
			}
		}
		//返回求出的极值
		return result;
	}
	
	//最小值
	public static int minValue(int [] aa) {
	//定义结果变量
		int result = aa[0];
		for(int i = 1; i<aa.length; i++ ) {
			if(result > aa[i]) {
				result = aa[i];
			}
		}
		//返回求出的极值
		return result;
	}

对数组内的值排序

  冒泡排序:将相邻的两个数逐个比较,如果前一个数比后一个小/大,那么互换位置,当第一轮比较完,最小/大值一定在末尾。
 比较的轮数:数组名.length - 1;
 每轮比较的次数:数组名.length - 轮数的计数器 - 1;
 改变每轮比较的次数内的if语句内的比较符,即可更改排序顺序
转载请标明出处

public static void main(String[] args) {
		int [] a = {15,2,3,45,5,6,7,78,7,0};
		
		//打印原数组
		printArray(a);
		//打印换将
		System.out.println();
		//将数从小到大排序
		min(a);
		//将排序后的数组进行打印
		printArray(a);
		
		System.out.println();
		//将数从大到小排序
		max(a);
		//将排序后的数组进行打印
		printArray(a);

	//冒泡排序 小到大
	public static void min(int[] bb) {
		for(int i = 0;i < bb.length-1;i++) {
			for(int j = 0; j < bb.length -i -1; j++) {
				if(bb[j] > bb[j+1]) {
					int cc = bb[j+1];
					bb[j+1] = bb[j];
					bb[j] = cc;
				}
			}
		}
		
	}
	
	//冒泡排序  大到小
	public static void max(int[] bb) {
		for(int i = 0;i < bb.length-1;i++) {
			for(int j = 0; j < bb.length -i -1; j++) {
				if(bb[j] < bb[j+1]) {
					int cc = bb[j+1];
					bb[j+1] = bb[j];
					bb[j] = cc;
				}
			}
		}
		
	}
	
	//遍历数组并将其打印
	public static void printArray(int[] aa) {
		for(int i = 0; i<aa.length;i++) {
			System.out.print(aa[i]+"\t");
		}
	}
}

查找

 一般查找

 查找数组中指定一个数的索引(效率低)

public static void main(String[] args) {
		int [] a = {15,2,3,45,5,6,7,78,7,0};
		//定义一个变量用于接收目标数值的索引,并传入数组与目标数值
		int result = index(a,2);
		//打印目标数值的索引
		System.out.println(result);
}
//定义一个查找的方法
	public static int index(int[] aa,int num) {
		int result = -1;
		for(int i = 0;i <aa.length;i++) {
		//使用if语句将目标值与数组内的值进行等值判断
			if(aa[i] == num) {
				result = i;
				break;
			}
		}
		return result;
		
	}
 二分法查找

 要求:有序的数组
步骤:
①分别定义最小索引、最大索引、中间索引
②使用while语句将目标值与中间索引的值进行等值比较
③若目标值大于中间索引的值,将中间索引加一并赋值给最小索引,否则将中间索引减一赋给最大索引
④更新中间索引
⑤返回目标值的索引(也就是中间索引)
 初始值:最小索引为0;最大索引:数组名.length - 1;中间索引:(最小索引+最大索引)/2

	public static void main(String[] args) {
		int [] a = {15,2,3,45,5,6,7,78,7,0};
		//先将数组进行排序
		min(a);
		//调用查找方法,并传入相关参数和接收目标索引
		int result = index1(a,6);
		//打印目标值的索引
		System.out.println(result);
}
	//冒泡排序 小到大
	public static void min(int[] bb) {
		for(int i = 0;i < bb.length-1;i++) {
			for(int j = 0; j < bb.length -i -1; j++) {
				if(bb[j] > bb[j+1]) {
					int cc = bb[j+1];
					bb[j+1] = bb[j];
					bb[j] = cc;
				}
			}
		}
	}
//定义二分法查找的方法
	public static int index1(int[] array,int aa) {
	//定义最小索引
		int minIndex = 0;
	//定义最大索引
		int maxIndex = array.length - 1;
	//定义中间索引
		int midIndex = (minIndex + maxIndex)/2;
			while(array[midIndex] == aa) {
				if(aa > array[midIndex]) {
					minIndex = midIndex + 1;
				}else {
					maxIndex = midIndex - 1;
				}
				//更新中间索引
				midIndex = (minIndex + maxIndex)/2;
			}
		return midIndex;
	}

数组倒置

 交换次数:数组名.length / 2; 末尾数值的索引:数组名.length - i -1;
步骤:
①第一层for循环内,计数器<数组名.length / 2;
②第二层for循环内,定义临时变量
转载请标明出处

public static void main(String[] args) {
		int [] a = {15,2,3,45,5,6,7,78,7,0};
		//打印原数组
		printArray(a);
		System.out.println();
		
		//倒置数组
		change(a);
		System.out.println();
		
		//打印倒置后的数组
		printArray(a);
}
//定义一个倒置数组的方法
	public static void change(int array[]) {
		for(int i = 0;i < array.length / 2;i++) {
			int temp = array[i];
			array[i] = array[array.length - 1 - i];
			array[array.length - 1 - i] = temp;
		}
	}	
	
//定义一个打印数组的方法
	public static  void printArray(int[] array1) {
		for(int i = 0; i<array1.length;i++) {
			System.out.print(array1[i]+"\t");
		}
	}

二维数组

  定义:二位数组就是集合中套集合(数组=集合)
注意:必须明确外围数组名!
整数1表示这个二维数组有多少个数组
整数2表示每一个一维数组的元素个数

定义语法:
//				两个整数都为数组的长度,整数1必须准确指定数值
数据类型 [][] 数组名 = new 数据类型[整数1][整数2];
数据类型 [][] 数组名 = {{1,值2,值3}{4,值5,值6}...};

int [][] array1 = new int [3][4];
int [][] array2 ={{1,2,3},{4,5,6},{7,8,9}...}

赋值语法:
int [][] array = new int[3][4];
array[0][0] = 1;
array[0][1] = 2;
array[0][2] = 3;
array[0][3] = 4;

array[1][0] = 11;
array[1][1] = 22;
array[1][2] = 33;
array[1][3] = 44;

array[2][0] = 111;
array[2][1] = 222;
array[2][2] = 333;
array[2][3] = 444;

打印结果:
1   2   3    4
11  22  33  44
111 222 333 444
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值