Java3~9章总结
1. 选择结构(一)
1.1. if选择结构
什么是if选择结构
if选择结构是根据条件判断之后再做处理的一种语法结构。下面来看一下最基本的if选择结构的语法。
if (条件) {
代码块 //条件成立后要执行的代码,可以是一条语句,也可以是一组语句
}
if选择结构流程图如下:
main()是程序的入口,main()中的语句将逐条顺序的执行,所有的语句都执行完毕后程序结束。
常用的逻辑运算符
运算符 | 汉语名称 | 表达式 | 说明 | 举例 |
---|---|---|---|---|
&& | 与、并且 | 条件1&&条件2 | 两个条件同时为真,则结果为真;两个条件有一个为假时,则结果为假 | 具有选举权的条件:年满18周岁&&中国公民。两个条件都为真时具有选举权;有一个条件为假,则不具有选择权 |
|| | 或、或者 | 条件1||条件2 | 两个条件有一个为真,则结果为真;两个条件同时为假,则结果为假 | 从中国去美国的方式:乘飞机||乘船。两个条件有一个为真,就可以去美国;若都为假,则去不了美国 |
! | 非 | !条件 | 条件为真时,结果为假;条件为假时,结果为真 | 成为优秀软件工程师的条件:!偷懒 |
if—else选择结构
if(条件){
//代码块1
}else{
//代码块2
}
产生随机数(0~9中任意整数)方法如下。
int random = (int)(Math.random()*10);
1.2 多重if选择结构
多重if选择结构不是多个基本if选择结构简单地排列在一起,它的语法如下。
if (条件1) {
//代码块1
}else if (条件2) {
//代码块2
}else if (条件3) {
//代码块3
}
需要注意的是:else块最多有一个或没有,else块必须要放在else if块之后。
1.3 嵌套if选择结构
嵌套if选择结构语法如下:
if (条件1) {
if(条件2){
//代码块1
}else{
//代码块2
}
}else{
//代码块3
}
需要注意的是:1.只有当满足外层if选择结构的条件时,才会判断内层if的条件。
2.else总是与它前面最近的那个缺少else的if配对。
本章总结
?常见的逻辑运算符有&&、||、!。
?Java中的if选择结构,包括以下形式。
⭕基本的if选择结构:可以处理单一或组合条件的情况。
⭕if—else选择结构:可以处理简单的条件分支情况
⭕多重if选择结构:可以处理连续区间的条件分支情况
⭕嵌套if选择结构:可以处理复杂的条件分支情况。
2. 选择结构(二)
2.1 switch选择结构
switch选择结构可以更好地解决等值判断问题。
switch语法如下:
switch (表达式){
case 常量1:
//代码块1;
break;
case 常量2:
//代码块2;
break;
······
default:
//代码块n;
break;
}
这里switch、case、default、break都是Java的关键字。
swotch:表示"开关",这个开关就是switch关键字后面小括号里表达式的值,JDK1.7后,switch语句小括号里可以是int、short、byte、char、枚举类型、String类型表达式。
case:表示"情况、情形",case后可以是int、short、byte、char、枚举、String类型,通常是一个固定的值。 case块可以有多个,顺序可以改变,但是每个case后常量的值必须各不相同。
default:表示"默认",即其他情况都不满足。default后要紧跟冒号。default块和case块的先后顺序可以变动,不会影响程序执行的结果。通常,default块放在末尾,也可以省略。
break:表示"停止",即跳出当前结构。
并非所有的多重if选择结构都可以用switch选择结构代替,通过观察,可以看出,switch选择结构的条件只能是等值的判断,而且只能是整型或字符型的等值判断。也就是说,switch选择结构只能用于判断一个整形变量或表达式是否等于某个整数值的情况,或者一个字符型变量或表达式是否等于某个字符的情况,并且每一个case后面的常量值都不同。而多重if选择结构即可以用于判断条件是等值的情况,也可以用于判断条件是区间的情况。
2.2 选择结构总结
?java中的if选择结构,包括以下形式。
⭕ 基本if选择结构:可以处理单一或组合条件的情况。
if选择结构语法如下:
if (条件) {
代码块 //条件成立后要执行的代码,可以是一条语句,也可以是一组语句
}
⭕if—else选择结构:可以处理简单的条件分支情况。这种形式结构简单,但在实际开发中使用非常频繁。
if—else选择结构语法如下:
if(条件){
//代码块1
}else{
//代码块2
}
⭕多重if选择结构:可以处理复杂的条件分支情况。多重if选择结构在解决需要判断的条件是连续的区间时有很大的优势。
多重if选择结构语法如下:
if (条件1) {
//代码块1
}else if (条件2) {
//代码块2
}else if (条件3) {
//代码块3
}
其中,else if块可以有多个,也可以没有,需要几个else if块完全取决于实际需求。else块最多有一个或没有,else块必须要放在else if块之后。
⭕嵌套if选择结构:在if选择结构中又包含一个或多个if选择结构的情况,这种结构一般用于较为复杂的流程控制中。if选择结构嵌套的形式很多,如以下形式是其基本的结构。
嵌套if选择结构有语法如下:
i
if (条件1) {
if(条件2){
//代码块1
}else{
//代码块2
}
}else{
if(条件3){
//代码块3
}else{
//代码块4
}
}
?Java中的switch选择结构。
当需要多重分支并且条件判断是等值判断的情况下,使用switch选择结构代替多重if选择结构会更简单一点,代码结构更清晰易读。
2.3 处理系统异常
Scanner in = new Scanner(System.in); //从控制台输入
通过调用Scanner对象的hasNextInt()方法,来判断用户从键盘上输入的字符是否合法。如果用户输入的是数字,则根据输入的具体数值跳转到相应的菜单。如果用户输入的不是数字,则给出友好提示“请输入正确的数字!”
通过判断,并给出用户提示,增加了程序的健壮性,使程序能够较好地处理发生的异常。在后面的学习中,还将介绍更多处理程序异常的方法。
本章总结
?当需要多重分支并且条件判断是等值判断的情况下,使用switch选择结构代替多重if选择结构会更简单,代码结构更清晰易读。在使用swtich选择结构时不要忘记在每个case的最后写上break语句。(用来结束本次循环)
?为了增加程序的健壮性,可以在程序中主动做出判断,并给出用户有好的提示。
?在实际开发中,遇到分支情况时,通常会综合运用if选择结构的各种形式及swtich选择结构来解决。
3 循环结构(一)
3.1 while循环
所有循环结构都有一个特点:
首先,循环不是无休止进行的,满足一定条件的时候循环才会继续,称为"循环条件",循环条件不满足的时候,循环退出;其次,循环结构是反复进行相同的或类似的一系列操作,称为"循环操作",循环条件不满足时,循环退出;其次,循环结构是反复进行相同的或类似的一系列操作,称为"循环操作"。
while循环结构语法如下:
while (循环条件) {
//循环操作
}
while循环结构的执行顺序一般如下。
(1)声明并初始化循环变量。
(2)判断循环条件是否满足,如果满足则执行循环操作;否则退出循环。
(3)执行完循环操作后,再次判断循环条件,决定继续执行循环或退出循环。
实际上,while循环结构如果第一次判断循环条件时就不满足,则会直接跳出循环,循环操作一遍都不会执行。这是while循环结构的一个特点:先判断,后执行。
3.2 程序调试
"调试"这个词在生活中也经常听到,如电器调试、仪表调试。生活中的调试一般是指初装电器或电器出现问题时排除故障的过程,首先发现问题所在,然后调整电器的某些设置,最后使其达到正常的运行状态。在程序设计领域,调试的概念与其类似,但又有不同。
为了找出程序中的问题所在,希望程序在需要的地方暂停,以便查看运行到这里时变量的值。还希望单步运行程序,跟踪程序的运行流程,观察哪条语句执行了,哪条语句没执行。
满足于暂停程序、观察变量和逐条执行语句等功能的工具和方法总称为程序调试。
3.3 do—while操作
和while循环不同,do—while循环以关键字do开头,然后是大括号括起来的循环操作,接着才是while关键字和紧随的小括号括起来的循环条件。需要注意的是,do—while循环结构以分号结尾。
do{
//循环操作
}while(循环条件);
do—while循环的执行顺序一般如下。
(1)声明并初始化循环变量。
(2)执行一遍循环操作。
(3)判断循环条件,如果循环条件满足,则循环继续执行,否则退出循环。
do—while循环的特点是先执行,在判断。
根据do—while循环的执行过程可以看出,循环操作至少执行一遍。
使用do—while循环解决问题的步骤与采用while循环解决问题的步骤是类似的。
使用do—while循环解决问题的步骤如下:
(1)分析循环条件和循环操作。
(2)套用do—while语法写出代码。
(3)检查循环能否退出。
本章总结
?循环结构由循环条件和循环操作构成。只要满足循环条件,循环操作就会反复执行。
?使用循环解决问题的步骤:分析循环条件和循环操作,套用循环的语法写出代码,检查下黁换能否退出。
?编写循环结构代码时需注意:循环变量的初值、循环操作中对循环变量值的改变和循环条件三者间的关系;确保循环次数正确,不要出现"死循环"。
?while循环结构的特点是先判断,后执行;do—while循环结构的特点是先执行,再判断。
?程序调试是满足暂停程序、观察变量和逐条执行语句等功能的工具和方法的总称。其主要方法包括设置断点、单步运行和观察变量。
4. 循环结构(二)
4.1 for循环
循环语句的主要作用是反复执行一段代码,直到满足一定的条件为止。
总结一下,可以把循环结构分成四个部分
?初始部分:设置循环的初始状态,如设置记录循环次数的变量i为0.
?循环体:重复执行的代码,即输出"好好学习,天天向上!"。
?迭代部分:下一次循环开始前要执行的部分,在while循环部分中它作为循环体的一部分,如使用"i++;",
进行循环次数的累加。
?循环条件:判断是或否继续循环的条件,如使用"i<100"判断循环次数是否已达到100。
在for循环结构中,这几个部分同样必不可少,不然循环就会出现错误。
for循环的语法如下:
for(表达式1;表达式2;表达式3){
//循环体
}
for循环结构中三个表达式的含义
表达式 | 形式 | 功能 | 举例 |
---|---|---|---|
表达式1 | 赋值语句 | 循环结构的初始部分,为循环变量赋初值 | int i=0 |
表达式2 | 条件语句 | 循环结构的循环条件 | i<100 |
表达式3 | 赋值语句,通常使用++或–运算符 | 循环结构的迭代部分,通常用来修改循环变量的值 | i++ |
for关键字后面括号中的三个表达式必须用";"隔开。for循环中的这三个部分及{}中的循环体使循环结构必需的四个组成部分完美地结合在了一起,非常简明。
for循环结构执行的顺序如下。
(1)执行初始部分 (int i = 0;)
(2)进行循环条件判断(i<100;)
(3)根据循环条件判断结果。如果为true,则执行循环体;如果为false,则退出循环,步骤(4)和步骤(5)均不执行。
(4)执行迭代部分,改变循环变量值(i++;)
(5)依次重复步骤(2)~步骤(4),直到退出for循环结构。
可见,在for循环结构中,表达式1这个初始部分仅仅执行了一次。
4.2 跳转语句
通过对循环结构的学习,我们已经了解了在执行循环时要进行条件判断。只有在条件为false时,才能结束循环。但是,有时根据实际情况需要停止整个循环或者跳到下一次循环,有时需要从程序的一部分跳到程序的其他部分,这些都可以由跳转语句来完成。Java支持三种形式的跳转:break;continue和return。return将在后面的章节中讲到,下面来学习其中的两中:break和continue。
小结:continue语句可以用于for循环结构,也可以用于while和do—while循环结构。在for循环结构中,continue语句使程序先跳转到迭代部分,然后判断循环条件。如果为true,则继续下一次循环;否则终止循环。在while循环结构中,continue语句执行完毕后,程序将直接判断循环条件。continue语句只能用在循环结构中。
学习了break和continue语句,可知这两个语句都能改变循环操作,但它们之间有什么区别呢?
break:用于终止某个循环,程序跳到循环体外的下一条语句。
continue:用于跳出本次循环,进入下一词循环的语句。
4.3 循环结构总结
到目前为止,我们已经学习了Java提供的三种最主要的循环结构,它们是while、do—while和for循环结构。无论哪一种循环结构,都有四个必不可少的部分:初始部分、循环条件、循环体、迭代部分,缺少了任何一个都可能造成严重的错误。下面从三个方面对这三种循环结构进行比较。
?语法不同。
while循环语句如下。
if (条件) {
代码块 //条件成立后要执行的代码,可以是一条语句,也可以是一组语句
}
do—while循环语句如下。
do{
//循环操作
}while(循环条件);
注意:do—while循环结构以分号结尾。
for循环语句如下。
for(初始化;条件;迭代){
//循环体
}
?执行顺序不同。
⭕while循环结构:先进行条件判断,再执行循环体。如果条件不成立,退出循环。
⭕do—while循环结构:先执行循环体,再进行条件判断,循环体至少执行一次。
⭕for循环结构:先执行初始化部分,再进行条件判断,然后执行循环体,最后进行迭代部分的计算。如果条件不成立,跳出循环。
?适用情况不同。
在解决问题时,对于循环次数确定的情况,通常选用for循环结构;对于循环次数不确定的情况,通常选用while和do—while循环结构。
本章总结
?for循环结构的语法格式如下。
for(表达式1;表达式2;表达式3){
//循环体
}
表达式1:循环结构的初始部分,为循环变量赋初值。
表达式2:循环结构的循环条件。
表达式3:循环结构的迭代部分,通常用来修改循环变量的值。
?在循环中,可以使用break和continue语句控制程序变量的值。
⭕breakyo语句用于终止某个循环,程序跳转到循环体外的下一条语句。
⭕continue语句用于跳出本次循环,进入下一次循环。
5. 数组
5.1数组概述
Java中的数组
在Java中,数组就是一个变量,用于将相同数据类型的数据存储再内存中。数组中的每一个数据元素都属于同一数据类型。
int类型变量只可以存储一个数据。
int类型数组可以存储无数个int类型变量。
了解了数组在内存中的存储方式,下面来看数组的基本要素。
?标识符。首先,和变量一样,在计算机中,数组也要有一个名称,称为标识符,用于区分不同的数组。
?数组元素。当给出了数组名称,即数组标识符后,要向数组中存放数据,这些数据就称为数组元素。
?数组下标。在数组中,为了正确地得到数组的元素,需要对它们进行编号,这样计算机才能根据编号去存取,这个编号就称为数组下标。
?元素类型。存储在数组中的数组元素应该是同一数据类型,如可以把学员的成绩存储在数组中,而每一个学员的成绩存储在数组中,而每一个学员的成绩可以用整型变量存储,因此称它的元素类型是整型。
5.2如何使用数组
在Java中,声明一维数组的语法如下。
语法:
数据类型[ ]数组名;
或者
数据类型 数组名[ ];
以上两个方式都可以声明一个数组,数组名可以是任意合法的变量名。
分配空间
虽然声明了数组,但并不会为数组元素分配内存空间,此时还不能使用数组。因此要为数组分配内存空间,这样数组的每一个元素才能对应一个存储单元。
简单来说,分配空间就是要告诉计算机在内存中分配一些连续的空间来存储数据。在Java中可以使用new关键字来给数组分配空间。
语法如下:
数组名 = new 数据类型[数组长度];
其中,数组长度就是数组中能存放的元素个数,显然应该为大于的整数。例如:
scores = new int [30]; // 长度为30的int类型数组
height = new double[30]; // 长度为30的double类型数组
names = new String[30]; // 长度为30的String类型数组
可以将上面两个步骤合并,即在声明数组的同时就给它分配空间,语法如下:
数据类型[ ] 数组名 = new 数据类型[数组长度];
赋值
分配空间后就可以向数组里放数据了。数组中的每一个元素都是通过下标来访问的,
语法如下:
数组名[下标值];
注意:在编写程序时,数组和循环往往结合在一起使用,可以大大简化代码,提高程序效率。通常,使用for循环遍历数组或者数组元素赋值。
在Java中还提供了另外一种创建数组的方式,它将声明数组,分配空间和赋值合并完成。
语法如下:
数据类型[] 数组名 = {值1、值2、值3,······,值n};
值得注意的是,直接创建并赋值的方式一般在数组元素比较少的情况下使用。
数组元素初始值
数据类型 | 初始值 |
---|---|
int | 0 |
double | 0.0 |
char | ‘\u0000’ |
boolean | false |
常见错误(需要注意)
1.数组下标从0开始
2.数组访问越界
注意:数组下标从0开始,而不是从1开始的。如果访问数据元素是指定的下标小于0,或者大于等于数组的长度,都将出现数组下标越界异常。
5.3 数组应用
数组排序
数组排序是实际开发中比较常用的操作,如果需要对存放在数组中的五位学员的考试成绩从低到高排序,应如何实现呢?其实在Java中这个问题很容易解决。先看下面的语法:
Arrays.sort(数组名);
本章总结
?数组是可以在内存中连续存储多个元素的结构,数组中的所有元素必须属于相同的数据类型。
?数组中的元素通过数组的下标进行访问,数组的下标从0开始。
?数组可用一个循环为元素赋值,或者用一个循环输出数组中的元素信息。
?通过数组,length可获得数组长度。
?利用Arrays类提供的sort()方法可以方便地对数组中地元素进行排序。
6 循环结构进阶
6.1二重循环结构
什么是二重循环?简单来说,二重循环就是一个循环体内又包含另一个完整地循环结构。前面我们学习了三种循环:while循环、do—while循环和for循环。这三种循环之间是可以互相嵌套的,一个循环要完整地包含在另一个循环中,如下面四种形式都是合法地。
语法如下:
//while与while循环嵌套
while(循环条件1){
//循环操作1
while(循环条件2){
//循环条件2;
}
}
//do—while与do—while循环嵌套
do{
//循环操作1
do{
//循环操作2
}while(循环条件2);
}while(循环条件1);
//for与for循环嵌套
for(循环条件1){
//循环操作1
for(循环条件2){
//循环操作2
}
}
上面四种形式中,循环条件1和循环操作1对应地循环称为外城循环,循环条件2和循环操作1对应的循环称为内层循环,内层循环结束后才执行外层循环的语句。在二重循环中,外层循环变量变化一次,内层循环变量要从初始值到结束值变化一遍。
6.12跳转语句进阶
如果希望循环在某种条件下不按正常流程进行,需要用到continue或break语句。那么,如何在二重循环中使用continue和break语句呢?它们怎样控制程序的执行呢?
本章总结
?二重循环就是一个循环体内又包含另一个完整的循环结构的循环。
?在二重循环中可以使用break、continue语句控制程序的执行。