黑马程序员——Java语言基础:程序流程控制、函数、数组

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一、程序流程控制(语句)

1.判断结构:if 语句的三种格式

(1)if 语句:

if(条件表达式)

{

执行语句;

}

(2)if  else 语句:

if(条件表达式)

{

执行语句;

}

else

{

执行语句;

}

 ※ if else结构简写格式:变量 = (条件表达式)?表达式1:表达式2;

 ※ 好处:可以简化if else代码;弊端:因为是一个运算符,运算后必须有一个结果

(3)if  else if......   else 语句:

if(条件表达式)

{

执行语句;

}

else  if (条件表达式)

{

执行语句 

}

……

else

{

执行语句;

}

2.选择结构:switch语句

switch(表达式)

{

case取值1:

执行语句;

break;

case取值2:

执行语句;

break;

.....

default:

执行语句;

break;

}

※ 何时结束:执行到break语句或switch语句大括号

※ 若匹配的case、default没有对应的break语句,则不判断case,一直执行语句,直到遇到break

※ default、case语句顺序不影响执行顺序,先执行case语句

※ 如何选择何时使用if或switch语句:如果判断的具体数值不多,而且符合byte  short  int  char四种类型,建议使用switch语句稍微高效。其他情况:对区间判断,对结果为boolean类型判断使用if,if的使用范围更广。 

3.循环结构:(对某些语句执行多次)

(1)while 语句:(条件满足,执行循环体)

while(条件表达式)

{

执行语句;

}

(2)do while 语句:(无论条件是否满足,至少执行一次循环体)

do

{

执行语句;

}while(条件表达式);

(3)for 语句:

for(初始化表达式;循环条件表达式;循环后的操作表达式)

{

执行语句;

}

※for和while的区别:for语句执行结束后,条件表达式中的变量在内存中被释放;while中的循环变量在循环结束后 还可以继续使用。如果是定义循环增量,用for更合适。

4.其他流程控制语句:

(1)break语句:有作用范围(选择结构和循环结构中用于跳出循环)

(2)continue语句:只能用在循环中,结束本次循环,继续下一次循环 

例:打印99乘法表

代码:

	class ForFor
	{
		public static void main(String[] args)
		{
			for(int x=1; x<=9; x++)
			{
				for(int y=1; y<=x; y++)
				{
					System.out.print(y+"*"+x+"="+y*x+"\t");
				}
				System.out.println();
			}
		}
	}

※ 若打印的99乘法表以1*1开始,则改变条件,让条件随着外循环变化

※ 若打印的99乘法表以9*9开始,则初始化值,让初始化随着外循环变化

例:打印三角形

----*

---* *

--*  *  *

-*  *  *  *

*  *  *  *  *

代码:

class ForForTest
{
	public static void main(String[] args)
	{
		for(int x=0; x<5; x++)
		{
			for(int y=x; y<5; y++)
			{
				System.out.print("-");
			}
			for(int z= 0; z<=x; z++)
			{
				System.out.print("* ");

			}
			System.out.println();
		}	
		
	}
}

二、函数:

1.概念:也称为方法,指具有独立功能的一段小程序,Java中最小的功能就是函数。

2.定义

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

{

执行语句;

return返回值;

}

3.特点

(1)对功能代码进行封装,以便复用

(2)只有被调用,才会执行

(3)提高了代码的复用性

(4)如果功能无具体返回值,返回值类型用一个特殊的关键字标识:void,有void关键字时,return语句可省略不写,写也不错。

(5)函数中只能调用函数,不能再函数内部定义函数

4.函数的重载(overload)

(1)定义:同一个类中,可存在一个以上同名函数,只要参数个数或类型不同即可。

(2)使用情况:定义的功能相同,单参与运算的未知内容不同。

※ 函数的参数是有顺序的,参数相同顺序不同也可能会重载

※ 重载与返回值类型无关,当参数类型及个数都相同时,返回值类型不同无法重载。

 

例:以下哪些函数与给定函数重载:voidshow(int a,char b,double c){}

a.void show(intx,char y,double z){} ※不重载,参数类型和个数都一样,是同一个函数

b.int show(inta,double c,char b){}※重载,参数类型不同

c.void show(inta,double c,char b){}※重载,参数类型不同

d.booleanshow(intc,char b){}※重载,参数个数不同

e.void show(doublec){}※重载,参数个数不同

f.double show(intx,char y,double z){}※不重载,参数个数和类型相同,返回值类型不同

三、数组

1.概念:同一种类型数据的集合,数组就是一个容器。

2.好处:使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。

3.格式

(1)元素类型 [ ]数组名 = new 元素类型 [元素个数或数组长度] ;

         如: int []  arr = new int [4];  也可以写成: int arr[] = new int[4];

(2)元素类型 []数组名 = new 元素类型 [ ]{元素1,元素2,…};

         如: int []  arr = new int []{1,2,3};

※ 数组是一个引用数据类型

※ 栈内存中存储的都是引用地址,数据使用完毕后,会自动释放

※ 堆内存中存储的是new出的实体对象,每个对象都有一个地址,标识数据存放的位置,未初始化定义时默认值都为0

4.数组的常见问题

(1)数组脚标越界异常(ArrayIndexOutOfBoundsException):访问到了数组中的不存在的脚标时发生。

(2)空指针异常(NullPointerException):arr引用没有指向实体,却在操作实体中的元素时(arr=null;)。

5.数组的常见操作

(1)遍历:for循环,可以用于获取最值

(2)排序

a.选择排序     

public static void selectSort(int arr[])
{
	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;
			} //换位操作
		}
	}
		

}

b.冒泡排序

public static void bubbleSort(int[] arr)
{
		
	for(int x=0; x<arr.length-1; x++)
	{
		for(int y=0; y<arr.length-x-1; y++)  
		//-x让每次比较的元素减少,-1避免角标越界
		{
			if(arr[y]>arr[y+1])
			{	
				int temp = arr[y];
				arr[y] = arr[y+1];
				arr[y+1]=temp;
			}  //换位操作
		}
	}
}

(3)查找:折半查找(数组必须有序)

a.第一种方法

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

	}
	return min;
}

b.第二种方法

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

(4)进制的转换

class ArrayTest
{
	
	public static void main(String[] args)
	{
		toBin(-6);	
		toHex(60);
		toBa(60);
	}
	//十进制--->二进制
	public static void toBin(int num)
	{
		trans(num,1,1);
	}
	//十进制--->八进制
	public static void toBa(int num)
	{
		trans(num,7,3);
	}

	//十进制--->十六进制

	public static void toHex(int num)
	{
		trans(num,15,4);
	}
	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]);
		}
	}
}

6.二维数组

1.概念:数组中的数组

2.二维数组的格式

    格式1: int[][] arr= new int[3][4];

          二维数组中一维数组的个数为3,每一个一维数组中的元素个数为4。

   格式2: int[][] arr= new int[3][];

          每个一维数组都是默认初始化值null。

   格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};

   每一个一维数组中具体元素都初始化了。

   注:一种特殊定义写法:int[]x,y[](相当于int[]x,int[]y[]),x是一维数组,y是二维数组。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值