文章目录
java中的常用语法
一.选择结构
1.if选择结构
if(条件){
代码块 //条件成立后要执行的代码,可以是一条语句,也可以是一组语句
}
基本含义
关键字if后小括号里的条件时一个表达式,而且表达式的值必须为true或false。程序执行时,先判断条件。当结果为true时,程序先执行大括号里的代码块,再执行if结构后面的代码。当结果为false时,不执行大括号里的代码块,而直接执行if结构
流程图
流程图直观、清晰地帮助我们分析问题或设计解决方案,是程序开发人员的好帮手。流程图使用一组预定义的符号来说明如何执行特定的任务。
如何使用if选择结构
1.使用基本的if选择结构
if(score>98){
System.out.println("老师说:不错,奖励一个mp4!");
}
判断成绩是否大于98,大于98则输出语句,否则不会输出这句话,这就是if结构先判断后执行的方式。
2.使用复杂条件下的if选择结构
当需要判断的条件同时存在多个时,我们就需要将他们连接起来,这时候就会用到java中的运算符。
运算符 | 汉语名称 | 表达式 | 说明 |
---|---|---|---|
&& | 与、并且 | 条件一&&条件二 | 两个条件同时为真,则也结果为真;若有一个为假,则结果为假 |
|| | 或者 | 条件一||条件二 | 两个条件有一个为真,则结果为真;两个条件同时为假,则结果为假 |
! | 非 | !条件 | 条件为真时,结果为假;条件为假时结果为真 |
if((score1>98 && score2>80)||(score1 == 100 && score2>70)){
System.out.println("老师说:不错,奖励一个mp4!");
}
3.使用if-else选择结构
与上面的if结构不同的是,除了要实现条件成立执行的操作外,还要实现条件不成立时执行的操作。这时就可以使用if-else结构,他的意思就像是“如果xx,就xx;否则,就xx”。
if(score>98){
System.out.println("老师说:不错,奖励一个mp4!");
}else{
System.out.println("老师说:惩罚进行编码!");
}
到此为止,需要掌握的if选择结构如下:基本if选择结构,只有一个if块;if-else选择结构,有if块和else块。
2.多重if选择结构
java中还有一种if选择结构的形式:多重if选择结构。多重if选择结构在解决需要判断的条件时连续的区间时有很大的优势。
if(条件1){
//代码块1
}else if(条件2){
//代码块2
}else{
代码块3
}
首先,程序判断条件1,如果成立,则执行代码块1,然后直接跳出这个多重if选择结构,执行他后面的代码。如果条件1不成立,则判断条件2,若成立则执行代码块2;反之,执行代码块3.其中,else if块可以有多个或没有,需要几个取决于需要。
if(score>=80){
System.out.println("良好");
}else if(score>=60){
System.out.println("中等");
}else{
System.out.println("差");
}
如果条件之间存在连续关系,则else if块的顺序是不能随意排列的,要么从大到小,要么从小到大,总之要有序的排列。
3.嵌套if选择结构
嵌套if选择结构就是在if选择结构里面再嵌入if选择结构。
if(条件1){
if(条件2){
//代码块1
}else{
//代码块2
}
}else{
//代码块3
}
- 只有当满足外层if选择结构的条件时,才会判断内层if的条件。
- else总是与它面前最近的那个缺少else的if配对。
- 为了使if结构更加清晰,应该把每个if或else包含的代码块用大括号括起来。
- 相匹配的一对if和else应该左对齐。
- 内层的if结构相对于外层的if结构要有一定的缩进。
4.switch选择结构
switch(表达式){
case 常量 1:
//代码块1;
break;
case 常量 2:
//代码块2;
break;
default:
//代码块n;
break;
}
关键字
- switch:表示“开关”,这个开关就是switch关键字后面小括号里表达式的值,JDK1.7后,switch语句小括号里可以是int、short、byte、char、枚举类型、String类型表达式。
- case:表示“情况”,case后可以是int、short、byte、char、枚举类型、String类型,通常是一个固定的值。case块可以有多个,顺序可以改变,但是每个case后常量的值也必须各不相同。
- default:表示“默认”,即其他情况都不满足。default后要紧跟冒号。default块和case块的先后顺序可以变动,不会影响程序执行的结果。通常,default块放在末尾,也可以省略。
- break:表示“停止”,即跳出当前结构。
执行过程
先计算并获得switch后面小括号里的表达式或变量的值,然后将计算结果顺序与每个case后的常量比较,当二者相等时,执行这个case块中的代码;当遇到break时,就跳出switch选择结构,执行switch选择结构之后的代码。如果没有任何一个case后的常量与switch后的小括号中的值相等,则执行switch末尾部分default块中的代码。
局限性
switch选择结构只能用于判断一个整型变量或表达式是否等于某个整数值的情况,或者一个字符型变量或表达式是否等于某个字符的情况,并且没一个case后面的常量值都不同。
二.循环结构
1.while循环结构
while(循环条件){
//循环操作
}
循环的含义
首先,循环不是无休止进行的,满足一定条件的时候循环才会继续,称为“循环条件”,循环条件不满足的时候,循环退出;其次。循环结构是反复进行相同的或类似的一系列操作,称为“循环操作”。
执行顺序
- 声明并初始化循环变量。
- 判断循环条件是否满足,如果满足则执行循环操作;否则退出循环。
- 执行完循环操作后,再次判断循环条件,决定继续执行循环或退出循环。
如何比较字符串
回顾之前,比较int或者char类型变量是否相等我们是用运算符"=="来完成的,而String类型的却有所不同。
//判断String型变量str1是否等于str2,若相等,则值为true,若不相等,则值为false
String str1 = "yes";
String str2 = "no";
boolean bool = str1.equals(str2);
System.out.println(bool);
以上代码运行后将输出false。因此,“y”.equals(answer)用来判断变量answer的值是不是小写英文字母y。因此我们能得出使用while循环结构解决问题的步骤。
- 分析循环条件和循环操作。
- 套用while语法写出代码。
- 检查循环能否退出。
- 永远不会退出的循环称为死循环。死循环是编程中应极力避免出现的情况,所以对于循环,编写完成后要仔细检查循环能否退出。
程序调试
当程序存在错误的时候,我们需要专门的技术来发现和定位错误,这个技术就是“程序调试”。满足暂停程序、观察变量和逐条执行语句等功能的工具和方法总称为程序调试。
如何进行程序调试
- 分析错误,设置断点:在想设置断点的代码行左侧边栏双击,就会出现一个圆形的断点标记,再次双击,断点即可取消。
- 启动调试,单步执行:设置好断点后,就可以单击“启动调试”按钮,即可开始调试。
2.do-while循环结构
do{
//循环操作
}while(循环条件);
执行顺序
- 声明并初始化循环变量。
- 执行一遍循环操作。
- 判断循环条件,如果循环条件满足,则循环继续执行,否则退出循环。
- do-while循环的特点是先执行,再判断。并且循环至少执行一遍。而且while后面的分号是必须的,千万不要忘记。
与while循环结构的不同点
- 与while循环结构相比,do-while循环结构将while关键字和循环条件放在后面,而且前面多了关键字do,后面多了一个分号。
- while循环结构先判断,再执行;do-while循环结构先执行,再判断。
- 在一开始循环条件就不满足的情况下,while循环结构一次都不会执行,do-while循环结构则不管什么情况都至少执行一次。
3.for循环结构
for(表达式1;表达式2;表达式3){
//循环体
}
for循环结构的组成
- 初始部分:设置循环的初始状态,如设置记录循环次数的变量i为0。
- 循环体:重复执行的代码。
- 迭代部分:下一次循环开始前要执行的部分,在while循环结构中它作为循环体的一部分。
- 循环条件:判断是否循环的条件,如使用“i<100”判断次数是否已经达到100。
表达式 | 形式 | 功能 | 举例 |
---|---|---|---|
表达式1 | 赋值语句 | 循环结构的初始部分,为初始变量赋初值 | Int i = 0 |
表达式2 | 条件语句 | 循环结构的条件 | i<100 |
表达式3 | 赋值语句,通常用++或–运算符 | 循环结构的迭代部分,通常用来修改循环变量的值 | I++ |
for关键字后面括号中的三个表达式必须用";"隔开,for循环中的这三个部分及{}中的循环体是循环结构必须的四个组成部分完美的结合在了一起,非常简明。
执行顺序
- 执行初始部分(int i = 0;)。
- 进行循环条件判断(i<100;)。
- 根据循环条件判断结果。如果为true,则执行循环体;如果为false,则退出循环,步骤4和步骤5均不执行。
- 执行迭代部分,改变循环变量值(i++)。
- 依次重复步骤2~步骤4.直到退出for循环结构。
break语句的使用
for(int i = 0;i<10;i++){
//跑400m
if(不能坚持){
break; //退出比赛
}
}
break语句用于终止某个循环,使程序跳转到循环体外的下一条语句。在循环中位于break后的语句将不再执行,循环也停止执行。
break语句不仅可以用在for循环结构中,也可以用在while和do-while循环结构中。break语句通常与if条件语句一起使用。
continue语句的使用
for(int i = 0;i<10;i++){
//跑400m
if(不口渴){
continue; //不喝水,继续跑
}
//接过水壶,喝水
}
continue语句可以用于for循环结构,也可以用于while和do-while循环结构。在for循环结构中,continue语句使程序先跳转到迭代部分,然后判定循环条件。如果为true,则继续下一次循环;否则,终止循环。在while循环结构中,continue语句执行完毕后,程序将直接判断循环条件。continue语句只能用在循环结构中。
4.二重循环结构
什么是二重循环
//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
}
}
//while与for循环嵌套
for(循环条件1){
//循环操作1
for(循环条件2){
//循环操作2
}
}
简单的来说,二重循环就是一个循环体内又包含另一个完整的循环结构。之前的三种循环结构之间可以互相嵌套。上面四种形式中,循环条件和循环操作对应的循环称为外层循环,循环条件2和循环操作2对应的循环称为内层循环,内层循环结束后才执行外层循环的语句。在二重循环中,外层循环变量变化一次,内层循环变量要从初始值到结束值变化一遍。
在二重循环中,continue为跳出当层的一次循环,进入当层的下一次循环,而break为结束当层循环体。
三.数组
1.什么是数组
数组就是一个变量,用于将相同数据类型的数据存储在内存中,同样,数组就是在内存空间划出一串的空间
数组的基本要素
- 标识符:首先,和变量一样,在计算机中,数组也要有一个名称,称为标识符,用于区分不同的数组。
- 数组元素:当给出了数组名称,要向数组中存放数据,这些数据就成为数组元素。
- 数组下标:在数组中,为了正确地得到数组的元素,需要对他们进行编号,这样计算机才能根据编号去存取,这个编号就成为数组下标。
- 元素类型:存储在数组中的数组元素应该是同一数据类型。
注意事项
- 数组只有一个名称,即标识符,如scores。
- 数组元素在数组里顺序排列编号,该编号即为数组下标,塔标明了元素在数组中的位置。第一个元素的编号规定为0,因此数组的下标依次为0、1、2、3、4等。
- 数组中的每个元素都可以通过下标快速来访问。由于元素是按顺序存储的,每个元素固定对应一个下标,因此可以通过下标快速访问到每个元素。
- 数组的大小(长度)是数组可容纳元素的最大容量。定义一个数组的同时也定义了它的大小。如果数组已满但是还继续向数组中存储数据的话,程序就会出错,这称为数组越界。
2.如何使用数组
声明数组
数据类型[] 数组名; 或者 数据类型 数组名[];
int[] scores;
分配空间
数组名 = new 数据类型[数组长度]
scores = new int[30];
赋值
数组名[下标值]
scores[0] = 89;
scores[1] = 60;
scores[2] = 70;
数据类型[] 数组名 = {值1,值2,值3,…,值n};
int[] scores = {60,70,98,90,76};
int[] scores = new int[]{60,70,98,90,76};
注意
数组一经创建,其长度是不可改变的,如果越界访问,程序会报错。如果定义的数组是基本数据类型的数组,即int、double、char和boolean类型,在java中定义数组后,若没有指定初始值,则依数据类型的不同,会给数据元素赋一个默认值。
数据类型 | 初始值 |
---|---|
int | 0 |
double | 0.0 |
char | ‘\u0000’ |
boolean | false |
3.数组进阶应用
数组排序
Arrays.sort(scores);
Arrays是java中提供的一个类,而sort()是该类的一个方法。按照这个语法,即将数组名放在sort()的括号中,就可以完成对该数组的排序。因此,这个方法执行后,数组中的元素已经有序了。
求数组最大值
max = scores[0];
for(int i = 0;i<scores.length;i++){
if(scores[i]>max){
max = scores[i];
}
}
这是一个循环的过程,max变量依次与数组中的元素 进行比较。如果max小于比较的元素,则执行置换操作。如果max较大,则不执行操作。因此,采用循环的方式来写代码会大大简化代码量,提高程序效率
向数组中插入元素
int index = scores.length;
System.out.prtintln("请输入新增成绩:")
Scanner in = new Scanner(System.in);
int num = in.nextInt;
for(int i = 0;i<scores.length;i++){
if(num>scores[i]){
inedx = i;
break; //以上是插入元素
}
}
//元素后移
for(int j = scores.length-1;j>index;j--){
scores[j] = scores[j-1];
}
scores[index] = num;
。如果max小于比较的元素,则执行置换操作。如果max较大,则不执行操作。因此,采用循环的方式来写代码会大大简化代码量,提高程序效率
向数组中插入元素
int index = scores.length;
System.out.prtintln("请输入新增成绩:")
Scanner in = new Scanner(System.in);
int num = in.nextInt;
for(int i = 0;i<scores.length;i++){
if(num>scores[i]){
inedx = i;
break; //以上是插入元素
}
}
//元素后移
for(int j = scores.length-1;j>index;j--){
scores[j] = scores[j-1];
}
scores[index] = num;
为了保持数组中的成绩有序,需要从数组的第一个元素开始与新增的成绩进行比较,直到找到要插入的位置,可以使用循环进行比较。找到插入位置后,将该位置后的元素后移一个位置,最后将新增的成绩信息插入该位置即可。