函数和数组基础

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

关于函数

1、首先要明确一个思想如何定义一个函数呢?

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

2、定义函数要注意的

/*  
  这个功能定义思想有问题,为什么呢?因为只为完成加法运算,至于是否要对和进行打印操作,
	那是调用者的事,不要在该功能中完成。
*/
public static void get(int a,int b)
{
	System.out.println(a+b);
}

3、何时使用重载?

当定义的功能相同,但参与运算的未知内容不同。那么,这时就定义一个函数名称以表示起功能,方便阅读,而通过参数列表的不同来区分多个同名函数。

4、重载演示中提高代码复用性的思想

/*
  注意看,代码倒是没啥稀奇的,主要是要掌握这种思想,当这两个重载的函数内部有大段代码相似时,就要考虑下如何做的更简便
  就如同print99()方法中,可以直接调用带参数的print99方法
*/
        public static void print99(int num)//打印自定义的99乘法表
	{
		for(int x=1; x<=num; x++)
		{
			for(int y=1; y<=x; y++)
			{
				System.out.print(y+"*"+x+"="+y*x+"\t");
			}
			System.out.println();
		}
	}

//打印99乘法表
public static void print99()
{
	print99(9);
}

关于数组部分

1、数组的初始化

//像下面的这种初始化方式就是静态初始化,已经把数组中元素的个数和内容给出来了
int[] arr = new int[]{3,1,6,5,4};
//也可以这样简化写
int[] arr = {3,1,6,5,4}; 
//而在数据不明确时就要采用如下定义方式,[]里是元素个数
int[] arr = new int[5];
要注意的是:数组是有默认初始化值的

2、角标越界异常和空指针异常

int[] arr = new int[3];
//ArrayIndexOutOfBoundsException会报这个异常,是因为操作数组时,访问到了数组中不存在的角标。
System.out.println(arr[3]);

//NullPointerException:空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。
arr = null;
System.out.println(arr[1]);
3、遍历一个数组

数组中有一个属性可以直接获取到数组元素个数 .length,使用方式:数组名称.length = 

int[] arr = {3,6,5,1,8,9,67};
//利用for循环遍历
for(int x=0; x<arr.length; x++)
{
	System.out.println("arr["+x+"]="+arr[x]+";");
}

4、一个打印数组元素的小功能

//要求:定义功能,用于打印数组中的元素。元素间用逗号隔开。
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]+"]");
	}		
}
这个函数不是多难,但是我觉得里面的一些思想还是得记住的,如何去掉最后一逗号,猛地一想也许还想不起来,这里告诉我,只要在for循环遍历的过程中加上一些限定条件,就能做到,for循环不能用的太死板,要活学活用

5、获取数组中的最值

//以获取最大值为例
public static int getMax(int[] arr)
{
	int max = arr[0];//把数组中第一个元素初始化给max
  //遍历数组的同时,拿每个元素去跟max比
	for(int x=1; x<arr.length; x++)
	{
		if(arr[x]>max)
			max = arr[x];
	}
	return max;
}
//其实还有一种方法
public static int getMax_2(int[] arr)
{
   int max = 0;
   for(int x=1; x<arr.length; x++)
   {
      if(arr[x]>arr[max])
        max = x;	
   }
   return arr[max]; 	
}
这里要说的是,写代码的过程中要多思考,同时第二种方法考验的是对角标对元素的认识程度

6、举个十进制转十六进制的例子

//这里面有些地方的思想是比较重要的
public static void toHex(int num)
{
   /*
     为什么要循环八次?因为一个整数是4个字节,一个字节是8位,也就是传进来的数
     有32个二进制位,而当我们把这二进制往十六进制转其实就是每次取4位,然后转成
     十六进制的数
   */
   for(int x=0; x<8; x++)
   {
      int temp = num & 15;//取后四位
      if(temp > 9)
         System.out.println((char)(temp-10+'A'));	
      else
         System.out.println(temp);
      num = num >>> 4;//往右边移4位,是为了取下个四位	
   }
}
总结:这种方法是有点复杂的,其实还有一种简单的就是查表法,把每个数对应的十六进制 的元素放进一个数组里,然后用temp做索引去数组里查,那就很简单了

7、关于二维数组

int[][] arr = new int[3][4];
/*
定义了名称为arr的二维数组。二维数组中有3个一维数组。
每一个一维数组中有四个元素。
*/
int[][] arr  = new int[3][];
/*
定义这样一个数组,里面的一维数组要进行默认初始化,因为
数组是引用类型,所以 要是打印arr[1]的话,结果是null
*/

//小知识点
int[] x,y[];//x一维,y二维。
int[] x;
int[] y[];


---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值