黑马程序员-Java基础【2】(流程控制语句,方法,数组)

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


一、流程控制语句

1、选择控制语句(if)

选择结构也被称为分支结构,选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码,Java语言提供了两种选择结构语句if语句和switch语句

 if语句有三种格式:

a:格式:

 if(条件表达式) {

 语句体     

  }        

执行流程:

首先判断条件表达式,看其结果是true还是false

如果是true就执行语句体

如果是false就不执行语句体

b:格式:

if(条件表达式) {

语句体1

}else{

语句体2

}

执行流程:

首判断条件表达式看其结果是true还是false

如果是true就执行语句体1

如果是false就执行语句体2

c:格式:

if(条件表达式1) {

语句体1;

}else  if (条件表达式2) {

 语句体2;

}

.......

else {

 语句体n+1;

}

执行流程:

首先判断条件表达式1看其结果是true还是false

如果是true就执行语句体1

如果是false就继续判断条件表达式2看其结果是true还是false

如果是true就执行语句体2

如果是false就继续判断条件表达式…看其结果是true还是false

如果没有任何条件表达式为true,就执行语句体n+1.

2、选择控制语句(switch)

格式:

switch(表达式) {

                     case 值1:

                            语句体1;

                            break;

                     case 值2:

                            语句体2;

                            break;

                     ...

                     default:

                            语句体n+1;

                            break;

 }

格式的解释说明:

        switch:表示这里使用的是switch语句。

switch:后面的小括号内通常是一个变量,是后面要判断的值。

        case:表示这里就是选项的值,它后面的值用来和表达式的值进行匹配。

        break:跳出switch语句。

        default:它相当于if语句的else.当所有的case和表达式都不匹配的时候,就走default的内容。

执行流程:

1:首先计算表达式的值

2:和每一个case进行匹配,如果有,就执行对应的语句体,看到break就结束.

3:如果没有匹配到,就执行default的语句体n+1.

注意事项:

1:switch(表达式):表达式可以取byte,short,int,char

JDK5以后可以是枚举

JDK7以后可以是字符串

2:case后面只能是常量,不能是变量,而且case后面的值是不能够重复的,case没有先后顺序,所有的情况都是并列的

3:default可以省略吗?

可以省略,但是不建议,因为它的作用是对不正确的情况给出提示.

4.:break可以省略吗?

可以省略,但是结果可能不是我们想要的.

会出现一个现象:case穿透.所以不建议省略.

5.default一定要在最后吗?

不是,可以在任意位置.但是建议在最后.

6:switch语句的结束条件

a:遇到break就结束了

b:执行到末尾就结束了

3、循环控制语句(for)

格式:

for(初始化表达式①;条件表达式②;增量表达式④){

循环体③

}

执行顺序: ①②③④>②③④>②③④… ②不满足为止

注意事项:

a:条件表达式结果必须是boolean类型

b:循环体如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略.建议永远不要省略.

c:一般来说:有左大括号就没有分号,有分号就没有左大括号

4、循环控制语句(while)

格式:

a:基本格式:

while(条件表达式){

循环体;

}

b:扩展格式:

初始化表达式;

while(条件表达式){

循环体;

增量表达式;

}

5、循环控制语句(do......while)

基本格式:

do{

循环体;

}while(条件表达式);

扩展格式:

初始化表达式;

do{

循环体;

增量表达式;

}while(条件表达式);

二、方法

定义:方法就是完成特定功能的代码块

格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
函数体;
return 返回值;

 }

1、方法格式解释

修饰符 如:public static

返回值类型 :用于限定返回值的数据类型

方法名:一个名称,为了方便我们调用方法

参数类型:限定调用方法时传入参数的数据类型

参数名 :是一个变量,接收调用方法时传入的参数

方法体: 完成功能的代码

return :结束方法以及返回方法指定类型的值 

返回值: 程序被return带回的结果,返回给调用者

2、特点:

定义方法可以将功能代码进行封装,便于对该功能进行复用。

方法只有被调用才会被执行。

方法与方法是平级关系,不能嵌套定义

方法的出现提高了代码的复用性。

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

3、方法重载:

方法重载概述:

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

方法重载特点:

与返回值类型无关,只看方法名和参数列表

在调用时,虚拟机通过参数列表的不同来区分同名方法

三、方法练习

1、打印99乘法表

/*
  需求:打印99乘法表
  思路:使用for循环嵌套结构
  步骤:
		1、先用一个for循环控制打印的行数
		2、在嵌套一个for循环的确打印行数
		3、在嵌套的循环体中输出结果

*/
class ChengFaTest 
{
	public static void main(String[] args) 
	{
		chengFa();
	}
	public static void chengFa()
	{
		//外循环控制函数
		for(int i=1;i<=9;i++)
		{
			//内循环控制列数
			for(int j=1;j<=i;j++)
			{
				//输出两数的乘积
				System.out.print(j+"*"+i+"="+i*j+"\t");
			}
			//换行
			System.out.println();
		}
	}
}

运行结果:

黑马程序员-Java基础【2】(流程控制语句,方法,数组)_第1张图片

2、方法重载练习案例

/*
  需求:分别求两个整数,小数和
  思路:使用方法重载
  步骤:
		1、写一个方法sum(),然后调用这个方法求和
		2、根据参数类型写出对象sum()方法
		3、输入结果查看
*/
class ChongZhai 
{
	public static void main(String[] args) 
	{
		int sum1=sum(10,11);//两个整数
		int sum4=sum(1,2,3);//三个整数
		float sum2=sum(1.0F,43.0F);//两个float类型
		double sum3=sum(234.1,22.1);//两个double类型
		
		System.out.println(sum1);
		System.out.println(sum2);
		System.out.println(sum3);
		System.out.println(sum4);

	}
	//根据传的参数不同,调用对应的方法
	public static int sum(int a,int b)
	{
		//参数是整数
		return a+b;
	}
	public static int sum(int a,int b,int c)
	{
		//三个参数
		return a+b+c;
	}
	public static float sum(float a,float b)
	{
		//两个float
		return a+b;
	}
	public static double sum(double a,double b)
	{
		//两个double
		return a+b;
	}
}
运行结果:

黑马程序员-Java基础【2】(流程控制语句,方法,数组)_第2张图片

四、数组

1、数组的概念及格式

数组的概念:

数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。

数组既可以存储基本数据类型,也可以存储引用数据类型。

数组的定义格式:

格式1:数据类型[] 数组名;

 int[] arr ;

格式2:数据类型 数组名[];

2、数组初始化概述

Java中的数组必须先初始化,然后才能使用。

所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

数组的初始化方式:

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。

静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

3、数组的内存图解

数组初始化的时候是在堆内存里面开辟一片空间,用来存放数组的值,在栈创建对象存放地址指向堆内存。

黑马程序员-Java基础【2】(流程控制语句,方法,数组)_第3张图片


4、数组操作常见的两个问题

a:数组索引越界

ArrayIndexOutOfBoundsException

访问到了数组中的不存在的索引时发生

b:空指针异常

NullPointerException

数组引用没有指向实体,却在操作实体中的元素时。

5、二维数组

格式1

数据类型[][] 变量名 = new 数据类型[m][n];

m表示这个二维数组有多少个一维数

n表示每一个一维数组的元素个数

举例

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

定义了一个二维数组arr

这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]

每个一维数组有2个元素,可以通过arr[m][n]来获取

   表示获取第m+1个一维数组的第n+1个元素

格式2

数据类型[][] 变量名 = new 数据类型[m][];

m表示这个二维数组有多少个一维数组

这一次没有直接给出一维数组的元素个数,可以动态的给出。

举例:

int[][] arr = new int[3][];

arr[0] = new int[2];

arr[1] = new int[3]

arr[2] = new int[1];

格式3

数据类型[][] 变量名 = new 数据类型[][]{ {元素…},{元素…},{元素…}};

简化版格式:

数据类型[][] 变量名 = { {元素…},{元素…},{元素…}};

举例:

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

6、数组常见操作

a:获取一维数组的最值

public class test {  
  
    public static void main(String[] args) {  
        int arr[]={1,2,3,4,5,6,7,8,9,10};  
        int max=0;  
		//遍历数组
        for(int i=1;i

b:数组反转

public static void reverse(int[] arr){
		//反转  

		//定义角标
		int start = 0;
		int end = arr.length -1;

		while ( start < end ){

			//对调 
			int temp = arr[start];
			arr[start] = arr[end];
			arr[end] =temp;

			start++;
			end--;
		}
		return ;
	}

	public static void printArray(int[] arr){
		System.out.print("[");
		for (  int x=0; x

c:数组元素查找
/*
    数组元素查找(查找指定元素第一次在数组中出现的索引)	
*/

class  ArrayDemo6{

	public static void main(String[] args){

		int[] arr = {1,2,3,4,5,2,3,42342,2,3,244,657,763,4,768,92,3,4};

		int index = getIndex(arr,2444);
		//判断index 
		if (index < 0 ){
			System.out.println("您想查找的元素的并没有");
		}else{
			System.out.println("您想查找的元素的角标为:" + index);
		}
	}

	/*
		两个明确:
			返回值类型: int
			参数列表: int[] ,int num 
	*/

	public static int getIndex(int[] arr,int num){
		//定义索引变量 
		int index = -1;  //-1表示就是没找到 

		//遍历 
		for (int x=0; x





你可能感兴趣的:(黑马程序员-Java基础【2】(流程控制语句,方法,数组))