Java基础学习第三章

Java基础学习第三章

前言

不知道昨天各位学的怎么样,虽然都只是基础知识,但我认为越基础的东西越重要,希望大家能有耐心啃完每一个基础知识点。昨天的流程控制语句我们还没讲完,但发现字数有点多了,所以今天继续介绍…

流程控制语句

循环语句

java中循环语句分为五大类,首先是大家最为熟悉的for循环

1. for循环

语法:

for(初始变量表达式 ; 条件判断 ; 修改初始变量表达式){

		//循环体

}

例:

for(int i = 0; i < 10 ; i++) {
			System.out.println(i);
		}

该语句的执行顺序为:创建一个 int 型变量 i ,给 i 赋值为 0 ;判断 i 是否小于 10 ;结果为 true ,执行输出语句,执行完输出语句后,i++ (i++表示 i + 1),在进行判断 i < 10 ,执行输出语句…当 i < 10 为 false 时,循环结束。

:for 循环语句中,需要注意条件判断表达式,以避免出现死循环的情况。

2. while循环

语法:

while(条件判断表达式){

//循环体

}

例:

int i = 1;
while(i <= 10){
    System.out.println(i);
    i++;
}

该语句的执行顺序为:i < 10 结果是否为 true ,如果为 true,则执行花括号内的语句,执行完毕后再次进入条件判断语句,当 i < 10 结果为 false 时,循环结束。

:while 在循环体中,一般会加入能使判断语句结果发生改变的语句,就像本例中的 i++ ;语句执行 10 后便会结束循环,若本例中没有 i++ ,while 循环则会一直循环下去。

3. do…while…

语法:

do{

//循环体

}while(条件判断表达式)

例:

int i = 1;
do{
    System.out.println(i);
    i++;
}while(i<=10);

do…while…循环跟 while 循环语法很相似,不过前者是先执行循环体后进行判断,而 while 则是先进行判断后执行循环体。在本例中,即使 i 的初始值为 11,该循环语句也会先执行一次再结束循环语句

补充:continue、break、return关键字使用

continue
一般用于循环语句,当需要循环到某一次时,跳过该次循环

//输出0~10之间所有的奇数
for(int i = 0;i<10;i++){
    if(i % 2 == 0){
        continue;
    }
    System.out.println(i);
}

我们可以看到,在循环语句中有一个if判断语句,当 i % 2 == 0 时,i 为偶数,执行 continue 语句,可跳过本次 for 循环 ,而不会执行之后的输出语句,直接进入下次循环,所以输出结果均为奇数。

break

break主要用于switch中的case条件,可以防止case穿透;另外,break还可以用于循环语句,在循环中的作用一般表示为结束一层循环(多层嵌套循环时,外层的循环不受影响)

例:

for(int j = 10;j<20;j++){			
    for(int i = 1;i<10;i++){
        if(i % 3 == 0){
            break;
        }
        System.out.println(j+"==="+i);
    }
}

这是一个双层嵌套循环语句,当最里层的判断语句执行为 true 时,break 会直接跳出本次循环,循环结束,但本例中 break 的作用只能结束最里层的那层循环,外层循环不受影响,若是需要连外层循环一起结束,则需要添加标签,不过一般不推荐这么做。

例:

loop1:for(int j = 10;j<20;j++){			
    loop2:for(int i = 1;i<10;i++){
        if(i % 3 == 0){
            break loop1;
        }
        System.out.println(j+"==="+i);
    }
}

这一次,当判断语句执行为 true 时,break会直接跳到 loop1 标记处,也就是最外层的循环,而控制平台只会有两次输出结果。

return

return 一般用于方法中,表示方法的结束,当return被执行是,其后续的代码没有执行的可能性。

例:

for(int j = 10;j<20;j++){			
		    for(int i = 1;i<10;i++){
		        if(i % 3 == 0){
		            return;
		        }
		        System.out.println(j+"==="+i);
		    }
		}

该程序也只会完成两次输出,与前面的 continue 和 break 不一样,return 不仅仅是跳出循环 ,而是直接结束方法本身。

4. 递归(Recursion)

递归指的是在方法内部对方法自身调用;递归一般用于一些常见的算法的解决,在实际应用中,比如对文件夹内部文件的递归检索;以及树形菜单的显示;递归是对循环的一种补充。

//求5的阶乘
public int m(int n){
    if(n == 1){
        return 1;
    }else{
        return n * m(n - 1);
    }
}

//斐波拉契数列
public long fib(long n){
    if(n == 1 || n == 2){
        return 1;
    }else{
        return fib(n - 1) + fib(n - 2);
    }
}

5. forEach

forEach也就是增强for循环,jdk1.5之后添加的。

语法:

for(元素类型 元素名称 : 遍历数组(集合)(或者能进行迭代的)){

//循环体

}

例:

int [] a = {1, 2, 3, 4, 5};//语句1
		for(int b : a) {
			System.out.println(b);
		}

该程序中,语句1 是创建了一个数组(之后会讲到),该数组中含有5个int类型的值,所以在 forEach 循环中,首先得创建一个int 型变量,所以 “ :” 左边的为 int b ,右边的 a 代表数组 a ,该语句会将 a 数组全部遍历一遍 ,并依此赋值给 b ,然后进入循环体执行输出语句,该程序的执行结果为:

!](https://img-blog.csdnimg.cn/20190717163957320.png)

数组

在java中,数组是一种用于存储一种相同类型数据的数据结构,比如一组整数,一组字符串,甚至是一组对象,数组是一种有序的线性结构

语法:

数据类型[ ] 变量名称;

在c语言中,语法是:
数据类型 变量名称[ ]
其实,在 java 中也可以这样声明,但格式不规范,所以不推荐大家这么使用。

例:

int[] a;//声明一个int类型的数组
char[] c;//声明一个char类型的数组
Student[] s;//声明一个Student类型的数组(当然前提是项目里有Student类型的对象)

数组的初始化

java中数组的初始化分为两种方式:

  1. 静态初始化:在声明时直接将数组中的元素定义出来
  2. 动态初始化:在声明数组时,只为其分配空间,而不赋予元素
//静态初始化
int[] i = {1,1,2,3,5,8,13};

//动态初始化
int[] j = new int[6];

获取数组中的元素

数组中的每一个元素都有一个索引,该索引从0开始;任何数组都包含一个length属性,用于获取数组中的元素个数

//静态初始化
int[] i = {1,1,2,3,5,8,13};
//取出数组中的元素 
System.out.println(i[0]); // 第1个
System.out.println(i[6]); // 第7个
//获取数组中的元素个数
System.out.println(i.length); 

数组遍历

//静态初始化
int[] i = {1,1,2,3,5,8,13};

//遍历数组中的元素-for循环
for(int n = 0;n < i.length;n++){
    System.out.println(i[n]);
}

//while循环遍历
int index = 0;
while(index < i.length){
    System.out.println(i[index]);
    index++;
}

//JDK1.5+新增了增强for循环(forEach)
for(int m:i){
    System.out.println(m);
} 

:数组的长度一旦定义,则无法修改

数组拷贝

在实际开发中,由于数组的长度一旦定义无法改变,在应对一些弹性需求时(比如动态数组:长度可变的数组),需要对数组的容量进行扩充,此时,可以通过数组的拷贝来实现;在java中数组的拷贝是通过System类中的arraycopy方法实现,该方法中包含5个参数:

  1. src:原数组
  2. srcPos:原数组拷贝的起始位置
  3. dest:目标数组
  4. destPos:目标数组中的起始位置
  5. length:拷贝的元素个数
int[] i = {3,4,5};

int[] j = new int[10];

//数组的拷贝 ArrayList
System.arraycopy(i,0,j,0,i.length);

多维数组

java中的多维数组即数组中的数组(数组中的每一个元素依旧是一个数组对象).

静态初始化

String[][] citys = {
    {"武汉","荆门","孝感","黄石"},
    {"长沙","湘潭","岳阳"},
    {"广州","东莞","韶关"}
};

:数组中的每一个元素,都是用逗号“ , ”隔开的。

动态初始化

int[][] a = new int[][];//会报错
int[][] b = new int[6][];//指定行空间,列空间可之后指定
int[][] c = new int[6][3];//指定行空间与列空间,长度不可再修改

b[0] = new int[2];//指定行空间
b[0][0] = 1;//给b数组中第一个数组中第一个元素赋值为 1

二维数组遍历

String[][] citys = {
    {"武汉","荆门","孝感","黄石"},
    {"长沙","湘潭","岳阳"},
    {"广州","东莞","韶关"}
};

for(int i = 0;i < citys.length;i++){
    for(int j = 0;j < citys[i].length;j++){
        System.out.print(citys[i][j]+" ");
    }
    System.out.println();
}

输出结果为:

在这里插入图片描述

注:还有一个动态数组没讲,因为内容比较多,所以打算之后专门花一个章节讲。

结束语

辛苦大家今天又坚持了1天,今天我们学到了数组,不知道大家是否跟的上进度,如果感觉有些许吃力的话可以多花点时间,不必把节奏捏的太快,我考虑了下,之后的课程我除了讲解语法以外,还会间接性穿插一些算法或者逻辑题,这样也会更有助我们能力的提高,大家一起加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值