一、流程控制语句
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();
- }
- }
- }
运行结果:
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;
- }
- }
四、数组
1、数组的概念及格式
数组的概念:
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
数组的定义格式:
格式1:数据类型[] 数组名;
int[] arr ;
格式2:数据类型 数组名[];
2、数组初始化概述
Java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
数组的初始化方式:
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
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<arr.length;i++){
- if(arr[max]<arr[i]){
- //判断找出最大的并返回索引
- max=i;
- }
- }
- System.out.println(arr[max]); //输出最大值
- }
- }
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<arr.length; x++){
- //判断
- if ( x!= arr.length -1){
- //x不是最后一个元素
- System.out.print(arr[x] +",");
- }else{
- System.out.print(arr[x]);
- }
- }
- System.out.print("]");
- }
- }
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<arr.length; x++){
- //比较
- if (num == arr[x]){
- System.out.println("找到了!!!");
- index = x; // 赋值
- return index; //找到了就结束程序,return
- }
- }
- return index; // 缺少返回语句
- }
- }
一、流程控制语句
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();
- }
- }
- }
运行结果:
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;
- }
- }
四、数组
1、数组的概念及格式
数组的概念:
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
数组的定义格式:
格式1:数据类型[] 数组名;
int[] arr ;
格式2:数据类型 数组名[];
2、数组初始化概述
Java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
数组的初始化方式:
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。
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<arr.length;i++){
- if(arr[max]<arr[i]){
- //判断找出最大的并返回索引
- max=i;
- }
- }
- System.out.println(arr[max]); //输出最大值
- }
- }
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<arr.length; x++){
- //判断
- if ( x!= arr.length -1){
- //x不是最后一个元素
- System.out.print(arr[x] +",");
- }else{
- System.out.print(arr[x]);
- }
- }
- System.out.print("]");
- }
- }
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<arr.length; x++){
- //比较
- if (num == arr[x]){
- System.out.println("找到了!!!");
- index = x; // 赋值
- return index; //找到了就结束程序,return
- }
- }
- return index; // 缺少返回语句
- }
- }