黑马程序员——函数、数组

---------------------- 黑马程序员 Android培训、期待与您交流! ----------------------

函数


函数的定义

• 函数就是定义在类中的具有特定功能的一段独立小程序。

• 函数也称为方法。

函数的格式:

修饰符 返回值类型 函数名(参数类型形式参数1,参数类型形式参数2,)

{

执行语句;

return 返回值;

}

返回值类型:函数运行后的结果的数据类型。

参数类型:是形式参数的数据类型。

形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。

实际参数:传递给形式参数的具体数值。

return:用于结束函数。

返回值:该值会返回给调用者。

函数的特点

1. 定义函数可以将功能代码进行封装

  2.便于对该功能进行复用

  3.函数只有被调用才会被执行

  4 .函数的出现提高了代码的复用性

  5.对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。

注意:

• 函数中只能调用函数,不可以在函数内部定义函数。

• 定义函数时,函数的结果应该返回给调用者,交由调用者处理。



/*
 * 
如何定义一个函数呢?
1,既然函数是一个独立的功能,那么该功能的运算结果是什么先明确
	这是在明确函数的返回值类型
2,在明确在定义该功能的过程中,是否需要未知的内容参与运算。
	 这是在明确参数的类型和参数个数


//需求:定义一个功能。完成3+4的运算。并将结果返给调用者
//1.明确功能的结果,是一个整数的和。
//2,在实现该功能的过程中是否有未知内容参与运算,没有。
//其实这两个功能就是在明确函数的定义
//1,是在明确函数的返回值类型。
//2,明确函数的参数列表(参数类型,参数个数)
 * 
 */

public class _08函数应用 {

	public static void main(String[] args) 
	{
		int sum = getSum(5,6);
		System.out.print(sum);
	}
	
		//定义两个数相加的方法
		public static int getSum(int x,int y)
		{
			return x+y;
		}
		//定义判断两个数是否相同的方法
		//思路:1,明确结果,结果是boolean  2,功能是否有未知内容参与运算,有,两个整数
		public static boolean compare(int a,int b)
		{
			return (a==b)? true: false;//第一种方式:三元表达式
			//return a==b;  第二种方式
		}
		//需求:定义功能,对两个数进行比较,获取较大的数
		public static int getMax(int a,int b)
		{
			return (a>b)? a:b;  
		}
}


函数重载

/**
 *什么时候用重载?
 *当定义的功能相同时,但参与运算的未知内容不同时,
 *这时就定义一个函数名称以表示其功能方便阅读,而通过参数列表的不同来区分多个不同函数
 */
package cn.jbit.output;
public class _09函数重载 {

	public static void main(String[] args) 
	{
		Add(4,5);
		Add(6,5,5);
		print99(5);
	}
	
	//定义两个数相加的和
	public static int Add(int x,int y)
	{
		return x+y;
	}
	
	
	//定义三个数相加的和
	public static int Add(int x,int y,int z)
	{
		return x+y+z;
	}
	
	
	//打印99乘法表
	public static void print99(int num)
	{
		for(int x=1;x<=num;x++)
		{
			for(int y=1;y<=x;y++)
			{
				System.out.print(y+"*"+x+"="+x*y+"\t");
			}
			System.out.println();
		}
	}
	
	
	//(提高代码的复用性)
	public static void print99()
	{
			print99(9);//此方法为打印小九九表,简写调用上面的方法
	}

}

数组

数组在内存中的结构

解析:当创建一个数组时,x 在栈中,new int[3]在堆中,并且它们每个数组元素的初始值=0,并生成一个十六进制的地址值0x0079,传给栈中的x,当栈中x拿到地址值时,再去访问堆中的数组元素。

如果将 x = null; 那么栈中的地址值和数组元素将会被视为垃圾,但是它不会立即进行清除,Java虚拟机它会不定时的启动一个垃圾回收机制,将数组实体在堆内存中清除。


注意:只要是new出来的实体东西,都不在栈里面,在堆里面,堆里面存放的是实体,实体里面包括数组和对象。

 

因为方便计算,每个内存区的计算方式不同,栈内存计算像x = 3;这种局部变量,当数据使用完,所占空间会自动释放,而堆内存用于计算new出来的数组对象:int[]x = new int[3]


总结:

堆内存的特点:1. 生成16进制地址值0x0012   2. 默认化初始值为0   3.垃圾回收机制

 

堆与栈的不同:栈――自动释放内存空间

                            堆――被虚拟机不定时启动的垃圾回收机制,进行释放

</pre><pre code_snippet_id="383349" snippet_file_name="blog_20140609_4_4156700" name="code" class="java">//获取数组中的最大值,最小值
	/*
	思路:
	1.获取最大值需要一个临时存储的变量;
	2.让每一个变量值与这个临时变量进行比较
	3.全部比较完成,那么该变量中存储的就是数组中最大值了
	*/
public class _03遍历数组中最大值 {
	
	public static void main(String[]args)
	{
		int[] arr = {5,2,5,6,7,33,22,44,11};
		int max = getMax(arr);
		int min = getMin(arr);
		System.out.println(max);
		System.out.print(min);
	}
	
	
	//定义一个找出数组中最大值的方法
	public static int getMax(int[] arr)
	{
		int max=arr[0];//0  这种方式是初始化数组中任意一个角标。
		for(int i=0;i<arr.length;i++)
		{
			if(max<arr[i])
			{
				max=arr[i];
			}
		}
		return max;
	}
	
	
	//找出最小值
	public static int getMin(int[] arr)
	{
		int min=0;
		for(int i=0;i<arr.length;i++)
		{
			if(arr[i]<arr[min])
				min=i;
		}
		return arr[min];
	}
}

冒泡排序

public class _04冒泡排序 {

	public static void main(String[] args) 
	{

		int[] arr = {5,5,1,6,4,22,22,8,9};
		//print(arr);//排序输出前
		sumPai(arr);
		print(arr);//排序输出后
		//Arrays.sort(arr);//实际开发中使用系统自带的排序法
	}

public static void sumPai(int[] arr)
	{
		//控制比较的趟数,循环一次,表示比较了一趟
		for(int i=0;i<arr.length-1;i++)//另一种方法for(int x=arr.length-1;x>0;x--)
		{                             // for(int y=0;y<x;y++)
			                          
			for(int j=0;j<arr.length-i-1;j++)//上面每循环一次,此循环就少比较一次
			{
				if(arr[j]<arr[j+1])//判断比较条件
				{
				int temp=arr[j];//使用交换法
				arr[j]=arr[j+1];
				arr[j+1]=temp;
				
				//**调用交换方法为**:Swap(arr,j,j+1);//传进去一个数组,和两个角标
				}
			}
		}

	}
	
	//排序输出功能
	public static void print(int[] arr)
	{
		for(int i=0;i<arr.length;i++)
		{
			if(i!=arr.length-1)//如果i不等于arr.length-1就加 逗号
			{
				System.out.print(arr[i]+",");
			}
			else
			{
				System.out.print(arr[i]);
			}
		}
	}

二维数组

public class _10二维数组 {

	public static void main(String[] args) {
		
		//定义一个名称为arr的二维数组。里面包含三个一维数组,每个一维数组中包含4个元素。
		//int[][] arr = new int[3][4];
		
		int[][] arr = new int[3][];
		
		//下面指定每个一维数组中的长度
		arr[0]=new int[3];
		arr[1]=new int[2];
		arr[2]=new int[1];
		System.out.println(arr.length);//打印的是二维数组中的长度:3
		System.out.println(arr[1].length);//打印的是二维数组中第二个一维数组的长度
		
		int[][]arr1 = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
		
		int sum=0;
		for(int x=0;x<arr1.length;x++)
		{
			for(int y=0;y<arr1[x].length;y++)
			{
				sum = sum + arr1[x][y];
			}
		}
		System.out.print(sum);
	}

}


经典面试:练习题
class Array2Demo 
{
	public static void main(String[] args) 
	{
//		int[] arr = new int[3];//一维数组。

		//int[][] arr = new int[3][4];//定义了名称为arr的二维数组。二维数组中有3个一维数组。
									//每一个一维数组中有四个元素。

		//System.out.println(arr[0][1]);
		
		/*
		int[][] arr  = new int[3][];

		arr[0] = new int[3];
		arr[1] = new int[1];
		arr[2] = new int[2];


		System.out.println(arr.length);//打印是二维数组的长度 3;
		System.out.println(arr[0].length);//打印二维数组中第一个一维数组长度
		*/

		int[][] arr = {{3,5,1,7},{2,3,5,8},{6,1,8,2}};

		int sum = 0;
		for(int x=0; x<arr.length;x++)
		{
			for(int y=0; y<arr[x].length; y++)
			{
				sum = sum + arr[x][y];
			}
		}

		System.out.println("sum="+sum);
	}
}
/*
int[] x; int x[];
int[][] y; int y[][]; int[] y[];


int[] x,y[];//x一维,y二维。
int[] x;
int[] y[];

a.
x[0] = y;//error

b.
y[0] = x;//yes

c.
y[0][0] = x;//error

d.
x[0][0] = y;//error

e.
y[0][0] = x[0];//yes

f.
x=y;//error
*/

----------------------  黑马程序员 Android培训、期待与您交流!  ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值