黑马程序员-----JAVA基础语法(二)

                 ---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

7.函 数:为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数。函数就是体现之一。

java中的函数的定义格式:

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

       执行语句;

       return 返回值;

    }

当函数没有具体的返回值时,返回的返回值类型用void关键字表示。

如果函数的返回值类型是void时,return语句可以省略不写的,系统会帮你自动加上。

return的作用:结束函数。结束功能。

 

如何定义一个函数?

    函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成:

    1)、明确该功能的运算完的结果,其实是在明确这个函数的返回值类型。

    2)、在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)。

函数的作用:

1)、用于定义功能。

2)、用于封装代码提高代码的复用性。

注意:函数中只能调用函数,不能定义函数。

主函数:

    1)、保证该类的独立运行。

    2)、因为它是程序的入口。

    3)、因为它在被jvm调用。

 函数定义名称是为什么呢?

答:1)、为了对该功能进行标示,方便于调用。

    2)、为了通过名称就可以明确函数的功能,为了增加代码的阅读性。

 重载的定义是:在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。

如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系。

8.数 组:用于存储同一类型数据的一个容器。

   好处:可以对该容器中的数据进行编号,从0开始。数组用于封装数据,就是一个具体的实体。  

如何在java中表现一个数组呢?两种表现形式。

1)、元素类型[] 变量名 = new 元素类型[元素的个数];

2)、元素类型[] 变量名 = {元素1,元素2...};

元素类型[] 变量名 = new 元素类型[]{元素1,元素2...};

内存结构:

1寄存器。2本地方法区。3方法区。4栈。5堆。

栈:存储的都是局部变量 ( 函数中定义的变量,函数上的参数,语句中的变量 );

    只要数据运算完成所在的区域结束,该数据就会被释放。

堆:用于存储数组和对象(通过new建立),也就是实体。啥是实体啊?就是用于封装多个数据的。      

1每一个实体都有内存首地址值。

2堆内存中的变量都有默认初始化值。因为数据类型不同,值也不一样。

3 垃圾回收机制。

数组操作常见的两个问题:

数组脚标越界异常(ArrayIndexOutOfBoundsException)
                 int[] arr = new int[2];
                 System.out.println(arr[3]);
访问到了数组中的不存在的脚标时发生。
空指针异常(NullPointerException)
                   int[] arr = null;
                 System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。

对数组操作最基本的动作就是存和取。

核心思想:就是对角标的操作。

/**    
 * 1.需要进行比较,并定义变量记录住每次比较后的较大值
 * 2.对数组中的元素进行遍历和变量中记录的元素进行比较
 * 如果遍历到的元素大于变量中记录的元素,就用变量记录住该最大值
 * 3.遍历结果,该变量记录就是最大值
 * 定义一个功能来实现:
 * 明确一:结果 是数组中的元素,int
 * 明确二:未知内容,数组
 */	
public class Test10Demo {			
    public static void main(String[] args) {
    	
    		int[] arr={3,4,6,7,2,1,27,109,56};//定义一个arr数组
    		int max=getMax(arr);//获取最大值
    		System.out.println("max="+max);//输出结果
    	}
     
    	public static int getMax(int[] arr)
    	{//定义变量记录最大值
    		int maxindex=0;//初始化数组中任意角标
    		for(int x=1;x<arr.length;x++)
    		{//for循环
    			if(arr[x]>arr[maxindex])
    				maxindex=x;
    		}
    		return arr[maxindex];
    	}
    
}
 /**    
 *冒泡排序 
 */	
public class Test10Demo {			
	public static void printArray(int[] arr)
	{  //遍历 数组
		System.out.print("[");
		for(int x=0;x<arr.length;x++)
		{   if (x!=arr.length-1)
               System.out.print(arr[x]+",");
		    else
		       System.out.println(arr[x]+"]");
		}   
	}
	public static void main(String[] args) 
	{
		int[] arr={34,19,11,109,3,56};//定义一个arr数组
		System.out.println("打印前:");//打印
		printArray(arr);
		
		bubblesort(arr);
		System.out.println("打印后:");
		printArray(arr);

	}

    public static void bubblesort(int[] arr)
    {
    	for(int x=0;x<arr.length-1;x++)
    	{
    		for(int y=0;y<arr.length-1-x;y++)
    			/*内循环:-1:为了避免角标越界
    			        -x:为了让外循环增加一次,内循环参数
    			                       与比较的元素个数递减
    			 */
    		{
    			if(arr[y]>arr[y+1])
    			{
    				int temp=arr[y];
    				arr[y]=arr[y+1];
    				arr[y+1]=temp;
    			}
    		}
    	}
    
    }
}
/**    
 *选择排序 
 */	
public class Test10Demo {			
	//遍历数组的功能
		public static void printArray(int[] arr)
		{   
			System.out.print("[");
			for(int x=0;x<arr.length;x++)
			{   if (x!=arr.length-1)
	               System.out.print(arr[x]+",");
			    else
			       System.out.println(arr[x]+"]");
			}   
		}
		public static void main(String[] args) 
		{
			int[] arr={34,19,11,109,3,56};//定义一个arr数组
			System.out.println("打印前:");
			printArray(arr);
			
			selectsort(arr);
			System.out.println("打印后:");
			printArray(arr);
			
		}

	    public static void selectsort(int[] arr)
	    {//for循环
	    	for (int x=0;x<arr.length-1;x++)
	    	{
	    		for(int y=x+1;y<arr.length;y++)
	    		{
	    			if(arr[x]>arr[y])
	    			{
	    				int temp=arr[x];
	    				arr[x]=arr[y];
	    				arr[y]=temp	;	
	    			}
	    		}
	    	}
	    }
	
}

/**    
 *<strong>二分查找,必须有前提:数组中的元素要有序。</strong>
 */	
public class Test10Demo {			
	public static void main(String[] args) 
	{
	  int[] arr={13,15,19,28,33,45,78,106};//定义一个arr数组
	  int index=halfSearch(arr,78);//查找数组中元素
	  System.out.println("index="+index);//输出结果
	}

	public static int halfSearch(int[] arr,int key)
	{
		int max,min,mid;
		min=0;
		max=arr.length-1;
		
		while(min<=max)
		{
			mid=(max+min)>>1;
		  
		if(key>arr[mid])
			min=mid+1;
		else if(key<arr[mid])
			max=mid-1;
		else
			return mid;

		}
		return -1;
	}
	
}	
/**    
 *进制转换
 */	
public class Test10Demo {			
	public static void main(String[] args) 
	{
	  toHex(26);
	  toBinary(-26);
	  toOctal(26);
      System.out.println(Integer.toBinaryString(-26));//输出结果
	}
	//十进制-->十六进制
	public static void toHex(int num)
	{
		trans(num,15,4);
	}
	//十进制-->二进制
	public static void toBinary(int num)
	{
		trans(num,1,1);
	}
	//十进制-->八进制
	public static void toOctal(int num)
	{
		trans(num,7,3);
	}
	public static void trans(int num,int base,int offset)
	{
		if(num==0)

		{
			System.out.println("0");
			return;
		}
		char[] chs={'0','1','2','3','4',
				    '5','6','7','8','9',
				    'A','B','C','D','E','F'};//定义一个查表数组
		char[] arr=new char[32];
		int pos=arr.length;
		while (num!=0)//判断临时容器
		{
			int temp=num & base;
			arr[--pos]=chs[temp];
			num=num>>>offset;
		}
		for(int x=pos;x<arr.length;x++)
		{
		  System.out.print(arr[x]);	//打印数组
		}
		System.out.println();
	  }
}	

二维数组:

格式1:int[][] arr = new int[3][2];
定义了名称为arr的二维数组;
二维数组中有3个一维数组;
每一个一维数组中有2个元素;
一维数组的名称分别为arr[0], arr[1], arr[2];
给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组;
每个一维数组都是默认初始化值null;
可以对这个三个一维数组分别进行初始化;
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];

格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
定义一个名称为arr的二维数组;
二维数组中的有三个一维数组;
每一个一维数组中具体元素也都已初始化;
第一个一维数组arr[0] = {3,8,2};
第二个一维数组arr[1] = {2,7};
第三个一维数组arr[2] = {9,0,1,6};
第三个一维数组的长度表示方式:arr[2].length;
注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。

/**
*获取arr数组中所有元素的和。
*使用for的嵌套循环即可
*/	
public class Test10Demo {			
    public static void main(String[] args) {
    int sum=0;//定义变量初始化
    int[][] arr={{3,8,2},{2,7},{9,0,1,6}};//定义一个arr二维数组
    for(int x=0;x<arr.length;x++)//for循环
    	for(int y=0;y<arr[x].length;y++){
    		sum+=arr[x][y];
    	}
    System.out.println("sum="+sum);//输出结果
    }
    
}<span style="font-family: Arial; background-color: rgb(255, 255, 255);"> </span>

                ---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值