流程控制语句:可以控制程序的执行流程。主要分成三种类型:顺序结构、选择结构(也称分支结构)、循环结构。
①顺序结构的概念:是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。总的来说,就是写在前面的先执行,写在后面的后执行。
②顺序结构的特点:从上往下,依次执行。
③顺序结构图:
例如如下代码,代码进入main函数之后,开始从上往下依次执行三个输出语句。
class ShunXuJieGouDemo {
public static void main(String[] args) {
System.out.println("程序开始了");
System.out.println("我爱Java");
System.out.println("程序结束了");
}
}
①选择结构,也称分支结构。选择结构有着特定的语法规则,代码要执行具体的逻辑判断进行运算,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
②选择结构的类型:在Java中,有两种选择结构语句,if语句和switch语句。其中,if语句又有这三种形式。分别是:单分支结构,双分支结构,多分支结构。
③if语句的三大类型
if(布尔类型表达式){
语句体1
}else{
语句体2
}
执行流程为:判断布尔类型表达式中值为true还是false,如果为true则执行语句体1,为false则执行语句体2。如下图所示:
语句体1;
}else if (关系表达式2) {
语句体2;
}
…
else{
语句体n+1;
}
执行流程是:
a、首先判断布尔类型表达式的结果是true还是false,为true是则执行语句体1;
b、如果是false就继续判断关系表达式2看其结果是true还是false;
c、如果是true就执行语句体2;
d、如果是false就继续判断关系表达式……看其结果是true还是false;
e、……;
f、如果没有任何关系表达式为true,就执行语句体n+1。
执行流程如下图所示:
if语句结构的代码示例:
import java.util.*;
/*
if语句的三种形式的演示:
if语句分为三种结构:单分支结构
双分支结构
多分支结构
*/
public class IfDemo{
public static void main(String[] args){
/*int i = 20;
//if语句的第一种形式:单分支结构
if(i >10){
System.out.println("这是if语句的单分支结构演示");
}*/
//if语句的第二种形式:双分支结构
/*int a = 10;
int b = 15;
if(a == b){
System.out.println("a和b的值相等");
}
else{
System.out.println("a和b的值不相等");
}*/
/*
if语句的第三种形式:多分支结构
这里用一个小例子来演示一下if语句的多分支结构。
需求:通过键盘录入一个成绩并判断出成绩的等级。
90-100分为优秀,80-90为良好,70-80为中等,60-70为及格,60分以下不及格。
*/
//创建键盘录入对象。
Scanner scan = new Scanner(System.in);
//录入数据
Sop("请输入考试成绩:");
int score = scan.nextInt();
//利用多分支结构对输入的成绩进行等级判断
if(score <0 || score > 100){
Sop("您输出的成绩有误");//输入的数据不合理,直接返回输入错误。
}
else if(score >= 90 && score < 100){
Sop("您的考试成绩等级为“优秀”");
}
else if(score >= 80 && score < 90){
Sop("您的考试成绩等级为“良好”");
}
else if(score >= 70 && score < 80){
Sop("您的考试成绩等级为“中等”");
}
else if(score >= 60 && score < 70){
Sop("您的考试成绩等级为“及格”");
}
else{
Sop("您的考试成绩等级为“不及格”,要加油啦!");
}
}
public static void Sop(Object obj){
System.out.println(obj);
}
}
相关概念阐述:switch语句专用于实现多分支结构程序,其特点是各分支清晰而直观。switch语句后面的括号中可以是任何表达式,取其整数部分与各常量表达式比较。其中常量表达式必须是能够自动转换为整型的,如字符型、短整型、枚举等。语句形式如下:
switch(表达式){
case 常量表达式1:语句1;braek;
case 常量表达式2:语句2;braek;
......
case 常量表达式n:语句n;braek;
default: 语句n+1
}
Switch语句的格式解释:switch语句中表达式的取值只能为byte、short、int、char四种类型 ; case后面跟的是要和表达式进行比较的值;break表示中断,结束的意思,可以结束switch语句;default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。执行流程图如下所示:Switch语句的代码实例演示:
/*
面试题:
byte可以作为switch的表达式吗?可以
long可以作为switch的表达式吗?不可以
String可以作为switch的表达式吗?Jdk1.7以后可以
案例:
键盘录入一个数据,根据这个数据,我们输出对应的星期?
键盘录入1,对应输出星期一
键盘录入2,对应输出星期二
...
键盘录入7,对应输出星期日
分析:
1:键盘录入,用Scanner实现
2:判断我们既可以使用if语句,也可以使用我们要讲解的switch语句
注意:
A:遇到左大括号缩进一个tab的位置。
B:关联不是很大的语句间空行
*/
import java.util.Scanner;
class SwitchDemo {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//控制键盘录入数据
System.out.println("请输入一个数据(1-7):");
int week = sc.nextInt(); //3
//switch判断语句
switch(week) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("你输入的数据有误");
break;
}
}
}
在Java中,有着三种循环语句:for,while,do……while。
①for循环语句详解
for(初始化语句;判断条件语句;控制条件语句){
......
循环体语句
......
}
a、判断条件语句的结果是一个boolean类型。
b、循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
c、一般来说:有左大括号就没有分号,有分号就没有左大括号。
/*
需求:统计”水仙花数”共有多少个
分析:
A:首先必须知道什么是水仙花数
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
B:定义统计变量,初始化值是0
C:三位数告诉了我们范围,用for循环就可以搞定
D:获取每一个三位数的个,十,百的数据
E:按照要求进行判断
F:如果满足要求就计数。
*/
class ForDemo{
public static void main(String[] args) {
//定义统计变量,初始化值是0
int count = 0;
//三位数告诉了我们范围,用for循环就可以搞定
for(int x=100; x<1000; x++) {
//获取每一个三位数的个,十,百的数据
int ge = x%10;
int shi = x/10%10;
int bai = x/10/10%10;
//按照要求进行判断
if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
//如果满足要求就计数。
count++;
}
}
System.out.println("水仙花数共有"+count+"个");
}
}
while循环语法格式
while(判断条件语句) {
循环体语句;
}
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
a、while循环和for循环可以互换
b、两者在格式上和使用上有点小区别。for循环中控制条件语句中的变量在循环结束后就不能再被访问到了。而while循环中还能继续使用。
c、for循环适合于针对一个范围判断进行操作。while循环适合于判断次数不明确操作。
/*
需求:统计水仙花数有多少个
*/
class WhileDemo3 {
public static void main(String[] args) {
//while循环版本
int count = 0;
int y = 100;
while(y<1000) {
int ge = y%10;
int shi = y/10%10;
int bai = y/10/10%10;
int x = ge*ge*ge+shi*shi*shi+bai*bai*bai;
if(x == y) {
System.out.println(x);
count++;
}
y++;
}
System.out.println("1000以内的水仙花数共有"+count+"个");
}
}
③do...while循环语句详解
do…while循环语句基本格式
do {
循环体语句;
}while((判断条件语句);
初始化语句;
do {
循环体语句;
控制条件语句;
} while((判断条件语句);
do…while循环语句流程图:
do…while代码演示:
public class DoWhileDemo{
public static void main(String[] args){
int x = 11;
do{
System.out.println("无论如何我都要执行一次");
}while(x < 10);
}
}
④三种循环结构的区别和注意事项
三种循环语句其实可以完成一样的功能,也就是说可以等价互换,但是还是有些小区别的:
do…while循环至少会执行一次循环体
注意事项:
写循环时,优先考虑for循环,再考虑while循环,最后考虑do…while循环。
⑤循环嵌套结构的使用(如:打印九九乘法表)
/*
需求:在控制台输出九九乘法表。
首先我们写出九九乘法表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
...
1*9=9 2*9=18 3*9=27 ...
注意:
'\x' x表示任意,这种做法叫转移字符。
'\t' tab键的位置
'\r' 回车
'\n' 换行
*/
class ForForTest{
public static void main(String[] args) {
//为了使用数据,我们从1开始
for(int x=1; x<=9; x++) {
for(int y=1; y<=x; y++) {
System.out.print(y+"*"+x+"="+y*x+"\t");
}
System.out.println();
}
}
}
在前面的java概述中,我们就提到过goto在java中是保留字,目前不能使用。没有了goto语句虽然增强了安全性,但在我们想知道某个循环在执行到哪一步就结束的时候却带来了不方便。为了弥补这个缺陷,java提供了break,continue和return来实现控制语句的跳转和中断。
①break概述
break的使用场景:
break的作用:
记住:
a、当break语句单独存在时,下面不要定义其它语句,因为执行不到,
b、break跳出所在的当前循环
c、如果出现了循环嵌套,break想要跳出指定的循环,可以通过标号来实现。
②continue概述
continue的使用场景:
continue的作用:
/*
数组常见操作演示
*/
class ArrayTest {
public static void main(String[] args) {
//定义数组
int[] arr = {11,22,33,44,55};
/*********************1、获取数组元素*********************************/
//通过数组角标一个一个获取
System.out.println(arr[0]);
//通过循环获取
for(int x=0; xmax)
max = arr[x];
}
int min = arr[1];
for(int x = 0;x < arr.length;x++){
if(arr[x]
二维数组其实就是一个元素为一维数组的数组。
代码演示如下:
/*
需求:二维数组遍历
外循环控制的是二维数组的长度,其实就是一维数组的个数。
内循环控制的是一维数组的长度。
*/
class Array2Test {
public static void main(String[] args) {
//定义一个二维数组
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
/************************遍历方法1************************/
//我们可以发现arr[0] = {1,2,3};所以可以如下进行遍历
for(int x=0; x
代码演示如下:
/*
需求:打印杨辉三角形(行数可以键盘录入)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
分析:看这种图像的规律
A:任何一行的第一列和最后一列都是1
B:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
步骤:
A:首先定义一个二维数组。行数如果是n,我们把列数也先定义为n。
这个n的数据来自于键盘录入。
B:给这个二维数组任何一行的第一列和最后一列赋值为1
C:按照规律给其他元素赋值
从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
D:遍历这个二维数组。
*/
import java.util.Scanner;
class Array2Test2 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner scan = new Scanner(System.in);
//这个n的数据来自于键盘录入。
System.out.println("请输入一个数据:");
int n = scan.nextInt();
//定义二维数组
int[][] arr = new int[n][n];
//给这个二维数组任何一行的第一列和最后一列赋值为1
for(int x=0; x
函数体;
return返回值;
}
①方法的格式说明: